【发布时间】:2015-06-01 20:04:09
【问题描述】:
我想了解如何在 python 中使用 map,通过 google 搜索找到了 http://www.bogotobogo.com/python/python_fncs_map_filter_reduce.php,我发现这很有帮助。
该页面上的一个代码使用了一个 for 循环,并以一种有趣的方式将 map 放入该 for 循环中,map 函数中使用的列表实际上采用了 2 个函数的列表。代码如下:
def square(x):
return (x**2)
def cube(x):
return (x**3)
funcs = [square, cube]
for r in range(5):
value = map(lambda x: x(r), funcs)
print value
输出:
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
因此,在该教程的这一点上,我想“如果您可以使用动态函数 (lambda) 编写该代码,那么它可以使用使用 def 的标准函数编写”。所以我把代码改成这样:
def square(x):
return (x**2)
def cube(x):
return (x**3)
def test(x):
return x(r)
funcs = [square, cube]
for r in range(5):
value = map(test, funcs)
print value
我得到了与第一段代码相同的输出,但令我困扰的是变量r 取自全局命名空间并且代码不是严格的函数式编程。还有我被绊倒的地方。这是我的代码:
def square(x):
return (x**2)
def cube(x):
return (x**3)
def power(x):
return x(r)
def main():
funcs = [square, cube]
for r in range(5):
value = map(power, funcs)
print value
if __name__ == "__main__":
main()
我玩过这段代码,但问题在于传递给函数def power(x)。我尝试了多种尝试传递到此函数的方法,但 lambda 能够自动将 x 变量分配给列表 funcs 的每次迭代。
有没有办法通过使用标准的def 函数来做到这一点,还是不可能,只能使用 lambda? 因为我正在学习 python,这是我的第一语言,我试图了解这里发生了什么。
【问题讨论】:
标签: python lambda functional-programming map-function