當我們在傳入函數時,有些時候,不需要明確地定義函數,直接傳入匿名函數更方便。
在Python中,對匿名函數提供了有限支援。還是以map()函數為例,計算f(x)=x2時,除了定義一個f(x)的函數外,還可以直接傳入匿名函數:
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 64, 81]
透過對比可以看出,匿名函數lambda x: x * x其實就是:
def f(x): return x * x
關鍵字lambda表示匿名函數,冒號前面的x表示函數參數。
匿名函數有個限制,就是只能有一個表達式,不用寫return,回傳值就是該表達式的結果。
用匿名函數有個好處,因為函數沒有名字,所以不必擔心函數名稱衝突。此外,匿名函數也是一個函數對象,也可以把匿名函數賦值給一個變量,再利用變量來調用該函數:
>>> f = lambda x: x * x >>> f <function <lambda> at 0x101c6ef28> >>> f(5)25
同樣,也可以把匿名函數作為返回值返回,例如:
def build(x, y): return lambda: x * x + y * y
封裝細節,提高安全性和可控性,經常在全域作用域中被用於函數外部,從而限制向全域作用域中添加過多的變數和函數。
在全域作用域中使用區塊級作用域可以減少閉包佔用記憶體的問題,因為沒有指向匿名函數的引用,只要函數執行完畢,就可以立即銷毀其作用域鏈了。
模仿區塊層級(私有)作用域:
function box(){ for(var i=0;i<5;i++){ //块级作用域(js无) } var i //即便重新声明,也不会影响之前的值 alert(i);//5 } box();
以上是什麼是匿名函數? Python匿名函式有什麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!