lambda 函式

Sprint_dV發表於2018-04-03

lambda用法

>>> x = 10
>>> a = lambda y: x + y 
>>> x = 20
>>> b = lambda y: x + y 

>>> a(10)
>>> b(10)
# 輸出結果是一樣的,因為這種情況下呼叫lambda時才捕獲數值

>>> a(10) 30
>>> b(10) 30
# 在定義時就捕獲引數數值
>>> x = 10
>>> a = lambda y, x=x: x + y 
>>> x = 20
>>> b = lambda y, x=x: x + y 
>>> a(10)
20
>>> b(10)
30
>>>
>>> funcs = [lambda x: x+n for n in range(5)] # 沒有指定呼叫時捕獲n,所以只會捕獲4
>>> for f in funcs:
... print(f(0))
...
4 
4 
4
4 
4 
>>>
>>> funcs = [lambda x, n=n: x+n for n in range(5)] 
>>> for f in funcs:
... print(f(0))
...
0 
1 
2 
3 
4 
>>>
  • 如果需要減少某個函式的引數個數,你可以使用 functools.partial() 。 partial() 函式允許你給一個或多個引數設定固定的值,減少接下來被呼叫時的參 數個數。為了演示清楚,假設你有下面這樣的函式:

>>> from functools import partial 
>>> s1 = partial(spam, 1) # a = 1 
>>> s1(2, 3, 4)
1234
>>> s1(4, 5, 6)
1456
>>> s2 = partial(spam, d=42) # d = 42
>>> s2(1, 2, 3)
1 2 3 42
>>> s2(4, 5, 5)
4 5 5 42
>>> s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42 >>> s3(3)
1 2 3 42
>>> s3(4)
1 2 4 42
>>> s3(5)
1 2 5 42
>>>
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章