您好,登錄后才能下訂單哦!
這篇文章主要講解了“python函數(shù)式編程實例介紹”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python函數(shù)式編程實例介紹”吧!
函數(shù)式編程:是指代碼中每一塊都是不可變的,都由純函數(shù)的形式組成。這里的純函數(shù),是指函數(shù)本身相互獨立、互不影響,對于相同的輸入,總會有相同的輸出。并且允許把函數(shù)本身作為參數(shù)傳入另一個函數(shù),還允許返回一個函數(shù)。
例如實現(xiàn)列表元素的二次方:
def multiply_2(list):
new_list=[]
for i in list:
new_list.append(item**2)
return new_list
# 函數(shù)式編程的優(yōu)點,主要在于其純函數(shù)和不可變的特性使程序更加健壯,易于調(diào)試和測試;缺點主要在于限制多,難寫。
純粹的函數(shù)式編程語言(比如 Scala),其編寫的函數(shù)中是沒有變量的,因此可以保證,只要輸入是確定的,輸出就是確定的;而允許使用變量的程序設計語言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出。
Python 允許使用變量,所以它并不是一門純函數(shù)式編程語言。Python 僅對函數(shù)式編程提供了部分支持,主要包括 map()、filter() 和 reduce() 這 3 個函數(shù),它們通常都結合 lambda 匿名函數(shù)一起使用。
python map()函數(shù)
基本語法格式:
map(function,iterable)
# function 參數(shù)表示要傳入一個函數(shù),其可以是內(nèi)置函數(shù)、自定義函數(shù)或者 lambda 匿名函數(shù);iterable 表示一個或多個可迭代對象,可以是列表、字符串等
函數(shù)的功能:
對可迭代對象的每一個元素,都調(diào)用傳入的函數(shù),并返回一個map對象
注意的是該map對象不能直接打印出來,需要通過for循環(huán)遍歷或者將其通過list()轉(zhuǎn)化為list對象才能顯示出來
示例:
list_demo=[6,7,8]
new_list=map(lambda x:x**2,list_demo)
print(list(new_list))
map() 函數(shù)是直接由用 C 語言寫的,運行時不需要通過 Python 解釋器間接調(diào)用,并且內(nèi)部做了諸多優(yōu)化,所以相比其他方法,此方法的運行效率最高。
python filter()函數(shù)
基本語法格式:鄭州人流醫(yī)院哪家好 http://mobile.zhongyuan120.com/
filter(function,iterable)
#功能是對 iterable 中的每個元素,都使用 function 函數(shù)判斷,并返回 True 或者 False,最后將返回 True 的元素組成一個新的可遍歷的集合。
示例:
list_demo=[6,7,8]
new_list=filter(lambda x:x%2==0,list_demo)
print(list(new_list))
python reduce()函數(shù)
基本語法格式:
reduce(function,iterable)
# 其中,function 規(guī)定必須是一個包含 2 個參數(shù)的函數(shù);iterable 表示可迭代對象。
reduce() 函數(shù)通常用來對一個集合做一些累積操作.
使用之前需要導入functools模塊
示例:
# 計算列表乘積
import functools
list_demo=[6,7,8]
result=functools.reduce(lambda x,y:x*y,list_demo)
print(result)
綜合來看:
當對集合中的元素進行一些操作時,如果操作非常簡單,比如相加、累積這種,那么應該優(yōu)先考慮使用 map()、filter()、reduce() 實現(xiàn)。另外,在數(shù)據(jù)量非常多的情況下(比如機器學習的應用),一般更傾向于函數(shù)式編程的表示,因為效率更高。
感謝各位的閱讀,以上就是“python函數(shù)式編程實例介紹”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對python函數(shù)式編程實例介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。