內置函數,匿名函數,遞歸
內置函數:
詳查下網址
https://docs.python.org/3/library/functions.html?highlight=built#ascii
divmod(x, y) # (商, 模)
enumerate(可叠代對象) # (序號,值)
eval(字符串) # 把字符串當成命令執行
frozenset({1,2,3}) # 不可變集合
globals() # 查看全局變量
locals() # 查看局部變量
isinstance(3, int) # 查看3是不是int類型
pow(3,3) # 3**3
pow(3,3,2) # 3**3 % 2
reversed() # 翻轉
round(3.3456, 3) # 保留3位小數後四舍五入
zip():拉鏈函數
s = ‘hello‘
l = [1,2,3,4,5,6]
zip(s,l)
map:映射,每個元素執行lambda表達式結果
l=[1,2,3,4]
m = map(lambda x:x**2, l)
生成一個叠代器,循環後結果
print(list(m))
>>[1,4,9,16]
reduce:合並
from functools import reduce
reduce(合並規則(func),可叠代對象range(100),初始值)
filter
filter(lambda, 列表) # 打印返回結果為True的值
sorted:排序,沒有改變原來的順序
sorted(list)
sorted(list, reverse=True)
匿名函數:
1 #這段代碼 2 def calc(n): 3 return n**n 4 print(calc(10)) 5 6 #換成匿名函數 7 calc = lambda n:n**n 8 print(calc(10))
遞歸:
遞歸特性:
1. 必須有一個明確的結束條件(否則容易死循環)
2. 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
3. 遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)
def febo(n): if n == 1 or n == 2: return 1 else:febo(n-1)+febo(n+1) def febo(n): a,b=0,1 res=[] for i in range(n): c=b b=a+b a=c res.append(b) return res斐波那契數列
‘‘‘實現一個輸出前 30 個整數的階乘的程序。
n! 的階乘定義為:n! = n * (n-1)!, 0! = 1,因此它非常適合使用遞歸函數來實現。‘‘
def func(n): res=1 if n>0: res=n*func(n-1) return res print(func(30))
內置函數,匿名函數,遞歸