[英]Higher Order of Function (Map)
我對python中的map
有點困惑。 map
的函數接受2個參數:`map(函數,變量)。
為什么下面的代碼能夠multiply
並add
為變量,但第二個代碼不能? 在通常情況下, 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 = 1
, multiply(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.