python3基礎(七)-遞迴函式和匿名函式
阿新 • • 發佈:2018-11-12
1、遞迴函式
函式內呼叫自己本身函式,就叫做遞迴函式。 計算一個數字的階乘n!=1*2*3*4*......*n 公式演變: n! = 1 * 2 * 3 * 4 * ...... * (n - 2) * (n - 1) * n = n * (n - 1) * (n - 2) * ...... * 4 * 3 * 2 * 1 = n * (n - 1)! 注意: 1、在函式的內部呼叫自己本身。 2、遞迴函式本質是一個方法的迴圈呼叫。有可能出現死迴圈。 3、一定要定義遞迴的邊界(什麼時候退出迴圈) def factorial(n): if n < 0: print("負數沒有階乘") elif n == 0 or n == 1: #定義函式的終止條件 return 1 else: #定義函式的階乘 return n * factorial(n - 1) a = factorial(10) print(a)
2、匿名函式
用lambda關鍵詞能建立小型匿名函式。這種函式得名於省略了用def宣告函式的標準步驟。lambda函式的語法只包含一個語句: lambda [arg1 [, arg2, ......, argn]]:expression # lambda 引數 : 表示式 例如: 普通的函式實現一個簡單的加法。 def add(a, b): return a + b print(add(11, 22)) 使用匿名函式的方式實現一個簡單的加法: func = lambda x, y : x + y print(func(11, 22)) #func雖然是一個變數,但是就相當於是一個函數了 常用招數-使用匿名函式方式實現動態函式: def test(a, b, fuction): result = function(a, b) #在此函式裡面,並未指定對a,b兩個變數的操作方式,最終的結果與傳入的匿名函式的實現方式為結果 return result print(11, 22, lambda x, y : x + y) #此處傳入的匿名函式對a, b兩個引數的操作為執行相加 list.sort(key=None,reverse=False) #排序函式,有兩個預設引數,key是指定按照什麼引數來進行排序,reverse是指定按升序還是降序,True為降序,False為升序 例如: nums=[1, 3, 6, 2, 4] nums.sort() #如果不帶引數,則代表sort()函式會取出nums當中每個元素,賦值給key,然後做對比排序。由於列表當中的元素是數字型別,所以是可以比對大小進行排序的。 然而如果列表當中的值是一個一個的字典呢? stus=[{"name":"zs", "age":"10"},{"name":"ls", "age":"30"},{"name":"ww", "age":"20"}] 如果呼叫stus.sort()則會報錯。因為字典與字典之間無法進行對比排序,比如{"name":"zs", "age":"10"}和{"name":"ls", "age":"30"}是完全無法比對的。 然而字典之間的比對,我們一般不是通過字典本身來進行比對排序,是通過字典內的某一個值進行排序,這種情況下應該怎麼辦呢? 因為sort()函式在比對時,會將每個值取出,賦值給key,那麼在比對數值型別的列表的時候,key就是一個變數,特別方便比較。而如果key被人為的指定成了一個匿名函式呢?當key被賦值成一個字典的時候,是不是就可以通過匿名方法的引數,獲取到這個字典,然後再通過表示式取出字典當中的某一個值後,再重新賦值給key,這樣就可以進行比較了。 例如: stus.sort(key = lambda x : x["name"]) #通過匿名函式取出字典變數當中的name值作對較 stus.sort(key = lambda x : x["age"]) #通過匿名函式取出字典變數當中的age值作對較 在上述的例子當中,雖然實現了函式的動態,但是整個程式卻是死的,程式碼執行結果永遠固定不變,那麼怎麼實現由使用者輸入指令呢? def test(a, b, fuction): result = function(a, b) return result func=input("請輸入") #在python2當中,這樣就可以了 func_new=eval(func) #由於在python3當中輸入的內容全部被當成字串,所以需要使用eval函式進行轉換 print(11, 22, func_new) 那麼lambda x, y : x + y則是由使用者輸入,則實現了動態程式。
3、資料交換
a=11
b=22
a,b=b,a
可變型別不能作為字典的key
作者:滄水巫雲
部落格:http://blog.csdn.NET/amir_zt/
以上原創,轉載請註明出處,謝謝。
https://blog.csdn.net/amir_zt/article/details/83090567