李丹 陜西工業職業技術學院 信息工程學院
關鍵字:Python 匿名函數 應用
在Python中,當需要定義一個功能簡單且只有一個表達式時,可以省去函數命名的過程,而將此函數定義為匿名函數,同時也可以避免定義函數的過程中存在函數名重復的問題。本文討論匿名函數的定義與調用,舉例說明其應用。
(1)匿名函數的定義
匿名函數,顧明思議就是沒有名字的函數,即不需要通過關鍵字def定義的函數。Python中,定義匿名函數使用關鍵字lambda,其一般格式為:
其中,冒號后面表達式的值作為匿名函數的返回值。
注:①參數列表中的參數可以是多個,并且參數之間用逗號進行分隔;
②表達式只能是一個表達式,即只能有一個返回值。
(2)匿名函數的調用
匿名函數一般不能直接使用,而是需要將其賦給一個變量,通過變量名(實參列表)來調用匿名函數。
注:實參列表中參數之間用逗號進行分隔,依次和參數列表中的參數從左往右一一對應。
例1:通過定義函數求10與2之差。
方法1:定義匿名函數實現,代碼如下:
方法2:通過def定義函數實現,代碼如下:
在Pycharm中運行這兩個程序,最終結果都是8
從此例子中可以看出:對于同一問題,匿名函數比def定義的函數代碼量少,更簡單且更易理解。
(3)匿名函數和一般函數的區別
與通過def定義的函數相比,匿名函數有以下不同之處:
①匿名函數沒有函數名,但是def定義的函數有函數名;
②匿名函數中只能有一個表達式,但是def定義的函數可以有多條語句;
③匿名函數中不可以使用選擇和循環語句,但是def定義的函數可以;
④匿名函數直接返回表達式的值而不需要寫return語句,但是def定義的函數要有返回值,則必須要用return語句;
⑤匿名函數只能處理簡單問題,復雜問題還需通過def定義函數實現。
在某些情況下,匿名函數處理問題非常有效。下面列舉匿名函數的一些應用。
(1)匿名函數作為方法的參數
例2:將1-10之間每個元素的平方依次放在同一列表中。
代碼如下:
在Pycharm中運行程序后,其結果是:
說明:① 此例子將匿名函數作為append()方法的一個參數,調用匿名函數依次計算出循環變量i的平方,并依次追加在列表list_1之后;
② 若用def定義的函數來實現,則需要定義一個函數,其代碼量比匿名函數多。
(2)匿名函數作為函數的實參
在Pycharm中運行程序后,其結果是:
說明:① 此例子在匿名函數中定義兩個數進行的運算,并將其作為實參傳遞給形參,從而實現兩個數的所有運算,其他運算可以用相類似的方法解決;
②若此問題用def定義的函數來解決,則需要定義三個函數來實現,可以看出匿名函數比def定義的函數的代碼量少。
(3)匿名函數作為內置函數的參數
例4:通過匿名函數實現對列表中元素的排序。
代碼如下:
在Pycharm中運行程序后,其結果是:
說明:① 匿名函數作為sort函數中key參數所對應的值,實現對列表中元素按照指定規則進行排序,其中lambda定義的匿名函數中的參數x表示列表中的一個元素,x['name']表示每個元素按照name進行排序,同理,x[‘age’]表示每個元素按照age進行排序;
② 此問題很難用def定義的函數實現。
本文通過介紹Python中匿名函數的定義與調用,并舉例詳細說明了三個方面的應用,可以看出匿名函數在解決某些問題時,更方便、更簡潔、更易懂且代碼量更少。