繁体   English   中英

更高阶的功能(地图)

[英]Higher Order of Function (Map)

我对python中的map有点困惑。 map的函数接受2个参数:`map(函数,变量)。

为什么下面的代码能够multiplyadd为变量,但第二个代码不能? 在通常情况下, multiply应作为函数传入,检出范围。

def multiply(x):
    return x * x

def add(x):
    return x + x

funcs = [multiply, add]

for i in range (1, 5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

这是第二个代码:

def multiply(x):
    return x * x

def add(x):
    return x + x

funcs = (add, multiply)
multi_func = (multiply)

for i in range (1, 5):
    value = list(map(lambda x: x(i), multi_func))
    print(value)

是否可以使用1功能并仍在范围内使用?

使用范围:

map(multiply, range(1, 5))

map将第一个参数(一个函数)应用于iterable的每个元素,即第二个参数。 该功能懒洋洋地应用。 这意味着只有在迭代地图对象时才会完成它,例如,当您创建它的列表时。

我们来看看你的第一个代码吧。 funcs = [multiply, add]创建一个可迭代的两个元素的列表。 这两个元素都是功能。 这在Python中是正常的,因为函数只是常规对象,可以传递,分配,具有属性等。循环

for i in range (1, 5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

重复形式1到4.在每次迭代时,它将lambda x: x(i)映射到funcs的函数。 i = 1 ,地图最终进行multiply(1), add(1) i = 2 ,它multiply(2), add(2) ,依此类推。

由于输入错误,第二个代码不起作用。 (x)只是x ,但是(x,)是一个元素元组,其第一个元素是x map 要求第二个参数是可迭代的,所以传入一个函数是行不通的。 如果要映射到单个函数,则需要提供具有一个元素的iterable: multi_func = (multiply,)

一旦纠正,第二版本将打印multiply(1)i = 1multiply(2)i = 2 ,等等。

list(map(multiply, range(1, 5)))的东西实际上是编写第二个版本的一种更简单的方法。 您也可以使用zip来执行与第一个代码类似的操作:

zip(map(func, range(1, 5)) for func in funcs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM