尽管Python主要是一种面向对象的编程语言,但它提供了许多函数式编程工具。而最值得注意的是map()函数。
在这篇文章中,我们将探讨什么是map() 函数以及如何在你的代码中使用它。
Python中的map()函数
map() 函数 (它是 Python 中的一个内置函数) 被用来对一个迭代器(像 Python 的 list 或 dictionary) 中的每个项目应用一个函数。它返回一个新的迭代器 (一个map 对象),你可以在你代码的其他部分使用。
这方面的一般语法是:
map(function, iterable, [iterable1, iterable2, ...])
让我们看一个例子:假设你有一个数字列表,你想用第一个列表中的数字的立方体创建一个新的列表。传统的方法是使用for循环:
org_list = [1, 2, 3, 4, 5]
fin_list = []
for num in org_list:
fin_list.append(num**3)
print(fin_list) # [1, 8, 27, 64, 125]
这是完全有效的,但让我们看看使用map() 函数如何简化你的代码:
org_list = [1, 2, 3, 4, 5]
# define a function that returns the cube of `num`
def cube(num):
return num**3
fin_list = list(map(cube, org_list))
print(fin_list) # [1, 8, 27, 64, 125]
不知道你怎么想的,但我觉得这样的逻辑更简洁:
如果你想知道幕后发生了什么,
map()函数本质上是遍历了迭代器(在我们的例子中,org_list)的每个元素,并对其应用立方体函数。最后,它将结果返回给一个新的可迭代对象(fin_list)。
如何在 Python 中使用 Lambda 表达式
我们不用写一个单独的函数来计算一个数字的立方体,而是用一个lambda 表达式来代替它。下面是你如何做到这一点的:
fin_list = list(map(lambda x:x**3, org_list))
print(fin_list) # [1, 8, 27, 64, 125]
干净多了,你同意吗?
如何在 Python 中使用内置函数
你也可以传入 Python 的内置函数。例如,如果你有一个字符串的列表,你可以很容易地用列表中每个字符串的长度创建一个新列表:
org_list = ["Hello", "world", "freecodecamp"]
fin_list = list(map(len, org_list))
print(fin_list) # [5, 5, 12]
如何在 Python 中使用带有多个遍历变量的函数
到目前为止,我们已经传入了map() 只接受一个参数的函数 (记得cube(num))。但是如果你的函数接收了多个参数呢?这方面的一个例子是pow(x, y) 函数,它接收了两个参数 (它返回 x^y 的结果)。
要应用一个有多个参数的函数,只需在第一个参数之后传入另一个可迭代的名字:
base = [1, 2, 3, 4]
power = [1, 2, 3, 4]
result = list(map(pow, base, power))
print(result) # [1, 4, 27, 256]
总结
在这篇文章中,你已经学会了如何在 Python 中使用map() 函数。你还看到了它是如何极大地减少你的代码的大小,使其更易读和无错误。
现在你应该能够自如地使用map() ,使用内置函数、lambda表达式,甚至是你自己的自定义函数了