1. 程式人生 > >內置函數,匿名函數,遞歸

內置函數,匿名函數,遞歸

oca 每次 保留 數據 ocs 通過 叠代 style 叠代器

內置函數:

詳查下網址

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))

內置函數,匿名函數,遞歸