日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Day10 Python基础之特殊函数(八)

發(fā)布時間:2024/4/17 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day10 Python基础之特殊函数(八) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?一些特殊函數(shù)

1.遞歸函數(shù)(recursion)

? ? 遞歸函數(shù)的定義:在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。

遞歸函數(shù)的優(yōu)點:是定義簡單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰。

遞歸函數(shù)的特性:

1. 必須有一個明確的結(jié)束條件

2. 每次進(jìn)入更深一層遞歸時,問題規(guī)模相比上次遞歸都應(yīng)有所減少

3. 遞歸效率不高(建議少用),遞歸層次過多會導(dǎo)致棧溢出(在計算機(jī)中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,

  每當(dāng)進(jìn)入一個函數(shù)調(diào)用,棧就會加一層棧幀,每當(dāng)函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,

? ?所以,遞歸調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出。)

1 def fac(n): 2 multi=1 3 for i in range(1,n+1): 4 multi=multi*i 5 return multi 6 7 print(fac(5)) 8 9 10 def fac_new(n): 11 if n==1: 12 return 1 13 return n*fac_new(n-1) 14 15 print(fac_new(5)) 16 17 輸出結(jié)果:120 Factorial階乘? 1 # Fibonacci 返回第n項斐波那契數(shù)列的值(0,1,1 2 3 5 8 13 21 34...) 2 def fibo(n): 3 if n<=1: 4 return n 5 return fibo(n-1)+fibo(n-2) 6 7 print(fibo(8)) 8 輸出結(jié)果:21 Fibonacci斐波那契數(shù)列(筆試經(jīng)常考)

2.內(nèi)置函數(shù)

?Built-in Functions??
abs()dict()help()min()setattr()
all()dir()hex()next()slice()
any()divmod()id()object()sorted()
ascii()enumerate()input()oct()staticmethod()
bin()eval()int()open()str()
bool()exec()isinstance()ord()sum()
bytearray()filter()issubclass()pow()super()
bytes()float()iter()print()tuple()
callable()format()len()property()type()
chr()frozenset()list()range()vars()
classmethod()getattr()locals()repr()zip()
compile()globals()map()reversed()__import__()
complex()hasattr()max()round()?
delattr()hash()memoryview()set()?

重要的內(nèi)置函數(shù):

? ? ? ?1.?filter(function, sequence)

對sequence中的item依次執(zhí)行function(item),將執(zhí)行結(jié)果為True的item做成一個filter object的迭代器返回。可以看作是過濾函數(shù)。

1 str=['a','b','c','d'] 2 def fun1(n): 3 if n!='a': 4 return n 5 6 ret=filter(fun1,str) 7 8 print(type(ret)) #迭代器,占用內(nèi)存空間很小,哆啦A夢 9 print(ret) #輸出內(nèi)存地址 10 print(list(ret)) #轉(zhuǎn)換成列表輸出 11 輸出結(jié)果 12 <class 'filter'> 13 <filter object at 0x00B48710> 14 ['b', 'c', 'd'] filter

? ??? ?2. map(function, sequence)

對sequence中的item依次執(zhí)行function(item),將執(zhí)行結(jié)果組成一個map object迭代器返回.
map也支持多個sequence,這就要求function也支持相應(yīng)數(shù)量的參數(shù)輸入 1 str=['a','b','c','d'] 2 def fun2(n): 3 return n+'hello' 4 5 ret=map(fun2,str) 6 7 print(type(ret)) 8 print(ret) 9 print(list(ret)) 10 11 12 輸出結(jié)果: 13 <class 'map'> 14 <map object at 0x02988790> 15 ['ahello', 'bhello', 'chello', 'dhello'] map

注:map和filter的區(qū)別是:filter只起過濾的作用,map可以對func2的返回值做處理

??3 reduce(function, sequence, starting_value)

對sequence中的item順序迭代調(diào)用function,如果有starting_value,還可以作為初始值調(diào)用.

1 from functools import reduce 2 str=['a','b','c','d'] 3 def fun3(x,y): 4 return x+y 5 6 ret=reduce(fun3,range(1,10)) 7 8 print(type(ret)) 9 print(ret) 10 11 輸出結(jié)果: 12 <class 'int'> 13 45 reduce?

??4 lambda

?匿名函數(shù)的命名規(guī)則,用lamdba?關(guān)鍵字標(biāo)識,冒號(:)左側(cè)表示函數(shù)接收的參數(shù)(a,b)?,冒號(:)右側(cè)表示函數(shù)的返回值(a+b)。

因為lamdba在創(chuàng)建時不需要命名,所以,叫匿名函數(shù)  

1 #這是函數(shù)式編程的思想()我們通常是命令式編程思想) 2 3 from functools import reduce 4 print(reduce(lambda a,b:a*b,range(1,6))) 5 6 輸出結(jié)果 7 120 lamda

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/weinapang/p/9163633.html

總結(jié)

以上是生活随笔為你收集整理的Day10 Python基础之特殊函数(八)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。