新知識點:Python裡面有幾個有趣的函式
導讀 | 今天主要是分享5個python內建的小函式,都是個人覺得強大而精緻的幾個函式。不是高深的知識,純粹因為覺得好用而分享。 |
眾所周知,python功能強大、語法靈活,這些得益於其豐富而強大的庫。除了眾多第三方庫和方法函式,python自帶的很多函式也非常有趣,用起來稱得上優雅。
今天主要是分享5個python內建的小函式,都是個人覺得強大而精緻的幾個函式。不是高深的知識,純粹因為覺得好用而分享。
很多語言都有匿名函式,python的匿名函式寫作lambda,當需要實現一定功能而又不想“大張旗鼓”的def一個函式時,lambda就是最優的選擇。
其語法格式一般是這樣的:
lambda x:x**2 # (x)>
也可以將它賦值給一個變數,由於python中一切皆物件,所以後續程式中就可以用該變數呼叫這個匿名函式。
f = lambda x:x**2 f(2) # 4
當然,這裡其實沒必要應用lambda來實現,因為既然要顯式呼叫,還不如干脆直接寫個明確的函式罷了。lambda函式更廣泛的應用場景在於該匿名函式作為另一個函式的引數傳遞時,應用就比較合適了,例如,將lambda作為sort()函式的key引數,就可以實現特定功能的排序。
dyct = {'a':2, 'b':1, 'c':5} sorted(dyct.items(), key = lambda x:x[1]) # [('b', 1), ('a', 2), ('c', 5)]
zip函式人如其名,是打包或者解包的函式,接受2個以上可迭代變數,輸出對應位置組成元組後的迭代型別。例如:
a = ['a', 'b', 'c'] b = (4, 5, 6) zip(a,b) # list(zip(a,b)) # [('a', 4), ('b', 5), ('c', 6)] tuple(zip(a,b)) # (('a', 4), ('b', 5), ('c', 6))
也可以接受多於2個輸入可迭代變數,而且如果各迭代變數長度不一致也不會報錯,只是此時返回迭代變數取決於輸入總長度最短的一個。例如:
a = ['a', 'b', 'c', 'd', 'e'] b = (4, 5, 6, 7) c = [True, False, True] list(zip(a,b,c)) # (('a', 4, True), ('b', 5, False), ('c', 6, True))
與zip打包相對應的用法是解包,即對一個打包形式的元素進行依次解包,並返回多個新的列表。例如:
aZip = (('a', 4, True), ('b', 5, False), ('c', 6, True)) a, b, c = zip(*aZip) # a:('a', 'b', 'c') # b:(4, 5, 6) # c:(True, False, True)
map函式也正如其取名一樣,是一個將接受的迭代變數依次經過某種對映,並輸出對映後的迭代變數。例如,如果對列表中的某個變數依次完成求值,並返回一個新的列表,則可以應用map:
a = [1, 2, 3, 4] map(str, a) #list(map(str, a)) # ['1', '2', '3', '4']
這是map函式的一個典型用法:接受2個引數,第一個引數(上例中是str()函式)是一個要作用的函式,第二個引數是可迭代變數。
當第一個函式的引數是是一個多變數函式時,map也可以接受更多的引數。例如:
a = [1, 2, 3, 4] b = [2, 2, 3, 3] list(map(lambda x, y:x**y, a, b)) # [1, 4, 27, 64]
與zip函式中類似,當map裡的函式引數長度不匹配時並不會報錯,只是輸出結果將由最短的決定:
a = [1, 2, 3, 4] b = [2, 2] list(map(lambda x, y:x**y, a, b)) # [1, 4]
與map函式類似,filter函式也接受一個函式及其變數作為引數,只是要求這個函式的返回結果是bool型,並用這個bool的結果決定輸出的取捨問題。例如需要對一個輸入列表過濾,要求保留3的倍數:
a = range(10) filter(lambda x:x%3==0, a) # list(filter(lambda x:x%3==0, a)) # [0, 3, 6, 9]
這裡需注意,當filter的第一個函式返回值不是bool型時不會報錯,只是它會轉化為bool型判斷,如果判斷結果不是False(python中會判為False的變數包括0、None、[]等等),則會將其輸出,否則過濾掉:
a = range(10) list(filter(lambda x:x%3, a)) # [1, 2, 4, 5, 7, 8]
map和filter函式都是多入多出型,實質上是完成了特定的變換或篩選。reduce則是歸約函式,將一系列輸入變數經過特定的函式後轉化為一個結果輸出。不過可能是由於應用場景有限的原因,reduce在python3中已不再是全域性呼叫函式,必須要從functools包中匯入方可使用:
from functools import reduce a = range(5) reduce(lambda x, y: x+y, a) # 10
reduce函式還可以接受一個可選的初始值作為引數。應用reduce函式可以實現很多小trick,就看能不能想的到用的出:
from functools import reduce s = 'abcdefg' reduce(lambda x, y: y+x, s, 'AA') # 'gfedcbaAA'
當然,儘管幾個函式用法不可謂不優美、功能不可謂不強大,但都不是必須的,甚至某種程度上都可以用其他形式加以替代,例如map和filter函式都可以用列表推導式來簡單實現,reduce函式功能也頂多用一個for迴圈迭代就能解決。
但在致力於使python程式變得更加簡潔優雅乃至耍秀的路上,這些函式也確有其用武之地,未嘗不值得一試!
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2686675/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python 的幾個常用的函式Python函式
- 分享幾個Python小技巧函式裡的4個小花招Python函式
- 設計log函式庫的幾個要點函式
- Python裡的17個“騷操作”好玩有趣Python
- python語言幾個常見函式的使用Python函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- 幾個重要的內建函式函式
- 幾個有趣的線上python 程式碼學習網站Python學習網站
- 1.5.1 Python函式初識Python函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- CSS幾個有趣的屬性分享CSS
- JS函式知識點梳理JS函式
- Python透過函式名呼叫函式的幾種場景Python函式
- JavaScript 之有趣的函式(函式宣告、呼叫、預解析、作用域)JavaScript函式
- 有趣的8個IT冷知識
- C++函式名後面有個constC++函式
- 關於執行緒的幾個函式執行緒函式
- python的五個特點,你知道幾個?Python
- 你知道 Python裡的「單分派泛函式」?Python函式
- set容器幾個關鍵函式函式
- 快速介紹幾個JS函式JS函式
- python生成器函式的特點Python函式
- es6新知識
- ES6 新知識
- 物化檢視幾個知識點
- 08-Python之路---初識函式Python函式
- Python基礎函式使用知識Python函式
- 偶函式在零點的泰勒展開式相關知識點函式
- 幾個簡單又實用的PHP函式PHP函式
- 5 個有趣的 Python 開源專案「GitHub 熱點速覽」PythonGithub
- JavaScript裡的函式JavaScript函式
- 【Python基礎】Python 函式返回多個值和函式註解Python函式
- 初識python必知的6個知識點Python
- python,函式各種基礎知識Python函式
- 遨翔在知識的海洋裡----js(字串常用函式)JS字串函式
- 執行緒中的幾個退出相關函式執行緒函式
- Kotlin中的幾個常用函式let with run also applyKotlin函式APP
- python 66個內建函式Python函式