天天看點

匿名函數為什麼叫lambda?

作者:大神聊程式設計
匿名函數為什麼叫lambda?

lambda函數的由來

Lambda 表達式(lambda expression)是一個匿名函數,Lambda表達式基于數學中的「λ演算」得名,直接對應于其中的lambda抽象(lambda abstraction)。

λ這個符号讀lambda,是以匿名函數又被稱為lambda函數,最早lambda函數應該是出現Lisp中的,因為它是一門「純函數式程式設計的語言」。

λ演算(英語:lambda calculus,λ-calculus)是一套從數學邏輯中發展,以變量綁定和替換的規則,來研究函數如何抽象化定義、函數如何被應用以及遞歸的形式系統。

有興趣的小夥伴可以深入學習下,據說它的作用比算法還大。

講完lambda函數的由來,随便帶大家學習下lambda函數的使用。

lambda函數普通用法

匿名函數為什麼叫lambda?

無參數形式

f1 = lambda: "f1"

           

等價于普通函數:

def f1():
    return "f1"
           

有參數形式

f2 = lambda x,y,z: print(x,y,z)
           

等價于普通函數:

def f2(x,y,z):
    print(x,y,z)
           

有分支條件形式

f3 = lambda x: print("偶數") if x % 2 == 0 else print("奇數")
           

等價于普通函數:

def f3(x):
    if x % 2 == 0:
        print("偶數")
    else:
        print("奇數")
           

lambda函數配合高階函數使用

如果你還不知道什麼是Python高階函數的話可以看下面這篇公衆号。

Python高階函數一點都不“高階”【#124】

配合map函數計算兩數平方和

s = lambda x,y : x**2 + y**2

array1 = [1,3,5,7,9]
array2 = [2,4,6,8,10]

print(list(map(s, array1, array2)))
           

配合filter函數篩選從數組中篩選偶數

array3 = [1,2,3,4,5,6,7,8,9,10]

even = lambda x: x if x % 2 == 0 else None
 
print(list(filter(even, array3)))
           

配合reduce函數實作數組中的數倆倆相乘

from functools import reduce

array4 = [1,2,3,4,5,6,7,8,9,10]

m = lambda x, y: x * y

print(reduce(m, array4))
           
匿名函數為什麼叫lambda?

lambda函數的使用建議

  • lambda是函數式程式設計的利器;
  • lambda函數與普通函數相比,不會提高程式運作效率的提高;
  • 不建議在lambda函數内寫太複雜的條件語句,不易讀;
  • 如果要使用循環,老老實實用def去定義函數。

作者:小K

來源:麥叔程式設計

繼續閱讀