簡體   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