首頁 >後端開發 >Python教學 >什麼是匿名函數? Python匿名函式有什麼用?

什麼是匿名函數? Python匿名函式有什麼用?

Tomorin
Tomorin原創
2018-08-17 17:54:457017瀏覽

當我們在傳入函數時,有些時候,不需要明確地定義函數,直接傳入匿名函數更方便。

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn