17 遞迴函式與匿名函式

2022-08-20 03:18:13 字數 2022 閱讀 7479

目錄

三、匿名函式

函式的遞迴呼叫是函式巢狀的一種特殊形式,具體是指在呼叫乙個函式的過程中,直接或間接地呼叫了自己。

# 直接呼叫

# 間接呼叫

從上圖可以看出,兩種情況下的遞迴呼叫都是乙個無限迴圈的過程,但在python對函式的遞迴呼叫的深度做了限制,因而並不會像大家所想的那樣進入無限迴圈,會丟擲異常,要避免出現這種情況,就必須讓遞迴呼叫在滿足某個特定條件下終止。

可以使用sys.getrecursionlimit()去檢視遞迴深度,預設值為1000,雖然可以使用

sys.setrecursionlimit()去設定該值,但仍受限於主機作業系統棧大小的限制,而且也不推薦取改設定

舉例:某公司四個員工,1號員工說自己薪資比2號員工高1000元,2號員工說自己薪資比3號員工高1000元,3號員工說自己薪資比4號員工高1000元,4號員工說自己薪資為5000元,那麼一號員工薪資為多少元

# **實現過程

def salary(ren):

if ren == 4:

return 5000

return salary(ren + 1) + 1000

s = salary(1)

print(s)

# 執行結果

8000

# 猜年齡遞迴

def age(n):

if n == 1:

return 18

return age(n - 1) + 10

res = age(5)

print(res)

匿名函式與有名函式有相同的作用域,但是匿名意味著引用計數為0,使用一次就釋放,所以匿名函式用於臨時使用一次的場景,匿名函式通常與其他函式配合使用

lambda 引數1,引數2,...: expression

# 定義:

lambda x, y: x + y

# 呼叫:

res = (lambda x, y: x + y)(1, 2)

print(res)

比較下列人員的工資

# 算工資

salaries =

def func(k):

return salaries[k]

# max和min是迭代乙個可迭代物件的內容,然後取最大/最小的值

print(max(salaries,key=func))

'''func這個函式的應用範圍極小,正常程式中如果真寫了這麼乙個函式,那麼除了在這裡使用一下,其他地方基本就用不上了,所以匿名函式的作用就體現出來了'''

# 匿名函式計算

print(max(salaries, key=lambda k:salaries[k])) # 算工資高

print(min(salaries, key=lambda k:salaries[k])) # 算工資低

python17 函式 匿名函式與高階函式

1.匿名函式 無引數形式匿名函式 a lambda ibeifeng print a 有形參的形式 fun lambda x x 3print fun 3 def fun1 n return n 3 加法 re lambda x,y,z x y z print re 2,4,6 2.高階函式 1 f...

匿名函式遞迴

lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...

匿名函式遞迴

lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...