- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- python函數式編程實(shí)例介紹
這篇文章主要講解了“python函數式編程實(shí)例介紹”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“python函數式編程實(shí)例介紹”吧!
函數式編程:是指代碼中每一塊都是不可變的,都由純函數的形式組成。這里的純函數,是指函數本身相互獨立、互不影響,對于相同的輸入,總會(huì )有相同的輸出。并且允許把函數本身作為參數傳入另一個(gè)函數,還允許返回一個(gè)函數。
例如實(shí)現列表元素的二次方:
def multiply_2(list):
new_list=[]
for i in list:
new_list.append(item**2)
return new_list
# 函數式編程的優(yōu)點(diǎn),主要在于其純函數和不可變的特性使程序更加健壯,易于調試和測試;缺點(diǎn)主要在于限制多,難寫(xiě)。
純粹的函數式編程語(yǔ)言(比如 Scala),其編寫(xiě)的函數中是沒(méi)有變量的,因此可以保證,只要輸入是確定的,輸出就是確定的;而允許使用變量的程序設計語(yǔ)言,由于函數內部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出。
Python 允許使用變量,所以它并不是一門(mén)純函數式編程語(yǔ)言。Python 僅對函數式編程提供了部分支持,主要包括 map()、filter() 和 reduce() 這 3 個(gè)函數,它們通常都結合 lambda 匿名函數一起使用。
python map()函數
基本語(yǔ)法格式:
map(function,iterable)
# function 參數表示要傳入一個(gè)函數,其可以是內置函數、自定義函數或者 lambda 匿名函數;iterable 表示一個(gè)或多個(gè)可迭代對象,可以是列表、字符串等
函數的功能:
對可迭代對象的每一個(gè)元素,都調用傳入的函數,并返回一個(gè)map對象
注意的是該map對象不能直接打印出來(lái),需要通過(guò)for循環(huán)遍歷或者將其通過(guò)list()轉化為list對象才能顯示出來(lái)
示例:
list_demo=[6,7,8]
new_list=map(lambda x:x**2,list_demo)
print(list(new_list))
map() 函數是直接由用 C 語(yǔ)言寫(xiě)的,運行時(shí)不需要通過(guò) Python 解釋器間接調用,并且內部做了諸多優(yōu)化,所以相比其他方法,此方法的運行效率最高。
python filter()函數
基本語(yǔ)法格式:鄭州人流醫院哪家好 http://mobile.zhongyuan120.com/
filter(function,iterable)
#功能是對 iterable 中的每個(gè)元素,都使用 function 函數判斷,并返回 True 或者 False,最后將返回 True 的元素組成一個(gè)新的可遍歷的集合。
示例:
list_demo=[6,7,8]
new_list=filter(lambda x:x%2==0,list_demo)
print(list(new_list))
python reduce()函數
基本語(yǔ)法格式:
reduce(function,iterable)
# 其中,function 規定必須是一個(gè)包含 2 個(gè)參數的函數;iterable 表示可迭代對象。
reduce() 函數通常用來(lái)對一個(gè)集合做一些累積操作.
使用之前需要導入functools模塊
示例:
# 計算列表乘積
import functools
list_demo=[6,7,8]
result=functools.reduce(lambda x,y:x*y,list_demo)
print(result)
綜合來(lái)看:
當對集合中的元素進(jìn)行一些操作時(shí),如果操作非常簡(jiǎn)單,比如相加、累積這種,那么應該優(yōu)先考慮使用 map()、filter()、reduce() 實(shí)現。另外,在數據量非常多的情況下(比如機器學(xué)習的應用),一般更傾向于函數式編程的表示,因為效率更高。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站