python - 我需要帮助了解 python 中的 map 函数
问题描述
def multiply(x):
return (x*x)
def add(x):
return (x+x)
funcs = [multiply, add]
for i in range(5):
value = list(map(lambda x: x(i), funcs))
print(value)
所以我知道 map 用于将函数/第一个 arg 应用于列表/第二个 arg 中的每个项目。我不明白它是如何在这个函数列表中处理的。
输出:
[0, 0]
[1, 2]
[4, 4]
[9, 6]
[16, 8]
解决方案
让我们试着把它从循环中拉出来,看看会发生什么。
您lambda x: x(i)
正在使用参数调用每个函数,i
并且 map (大致)将其转换为列表。
list(map(lambda x: x(0), funcs)) -> [0,0]
这和说的一样:[multiply(0), add(0)]
。
如果我们用 1 再试一次:
list(map(lambda x: x(0), funcs)) -> [1,2]
这和说的一样:[multiply(1), add(1)]
。
您正在应用的函数,即 map 的第一个参数,是您的 lambda。这恰好是一个返回其输入结果的高阶函数。
重写此程序的类似方法是:
def multiply_and_add(i):
return [multiply(i), add(i)]
result = map(multiply_and_add, range(5))
for value in result
print(value)
推荐阅读
- typescript - 使用 ng-packagr 时 Angular 通用构建失败?
- java - 输入参数为 Map 类型的 Java Spark UDF
- heroku - 在 heroku 中部署时,prisma graphql 令牌无法验证
- hive - 如何通过配置单元在序列文件中写入自定义键值
- jquery - 查找重复的 div 内容并替换它
- python - 在MoviePy中使文本在宽度和高度之间自动调整为TextClip
- java - 生成 TestNG.xml 文件中的问题
- magento2 - Magento结帐表单元素email.html页面编辑问题
- testing - Katalon API 测试,不能使用返回 cookie 的 API
- java - IllegalStateException:连接到 HttpURL 时已连接