1.返回函式
求和的函式,可以不返回求和的結果,而是返回求和的函式:
def calc_sum(*args):
def sum():
ax=0
for n in args:
ax=ax+n
return ax
return sum
2.匿名函式
以map()函式為例,計算f(x)=x2時,除了定義乙個f(x)的函式外,還可以直接傳入匿名函式:
print(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表示函式引數
用匿名函式有個好處,因為函式沒有名字,不必擔心函式名衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式:
f=lambda x:x*x
print(f(5))
25同樣,也可以把匿名函式作為返回值返回,比如:
def build(x, y):
return lambda: x * x + y * y
3.偏函式
nt()函式可以把字串轉換為整數,當僅傳入字串時,int()函式預設按十進位制轉換:
print(int(『12345』))
12345
但int()函式還提供額外的base引數,預設值為10。如果傳入base引數,就可以做n進製的轉換:
print(int(『12345』,base=6))
1865
假設要轉換大量的二進位制字串,每次都傳入int(x, base=2)非常麻煩,於是,我們想到,可以定義乙個int2()的函式,預設把base=2傳進去:
def int2(x,base=2):
return int(x,base)
print(int2(『1000000』))
print(int2(『1010101』))
6485
functools.partial就是幫助我們建立乙個偏函式的,不需要我們自己定義int2(),可以直接使用下面的**建立乙個新的函式int2:
import functools
int2=functools.partial(int,base=2)
print(int2(『1000000』))
print(int2(『1010101』))
6485
返回函式 匿名函式lambda 偏函式
1 函式作為結果值返回 例如 可變引數求和,不會立刻返回求和結果,而是返回求和函式 例如 可變引數求和 def lazy sum args defsum ax 0for n in args 返回函式內部引用了lazy num 函式的引數 ax ax n return ax return sum f ...
函式式程式設計之返回函式 匿名函式
1 返回函式 高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。每次迴圈,都建立了乙個新函式,呼叫f1,f2,f3結果都為9 原因 返回的函式引用了變數i,三個函式都返回時,所引用的變數i變為了3,所以最終結果為9 返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。如果一定要用迴...
python函式式程式設計(二)返回函式 匿名函式
1.函式作為返回值 高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。我們來實現乙個可變引數的求和。通常情況下,求和的函式是這樣定義的 defcalc sum args ax 0 for n in args ax ax n return ax 如果不需要立刻求和,而是在後面的 中,根據...