Python常用高級函數
阿新 • • 發佈:2019-03-08
它的 模塊 part 元素 內置 lte 整數 ted ()
一 、匿名函數
有些時候,我們不需要顯式的定義函數,可以使用匿名函數臨時快速定義函數。
lambda x: x * x
關鍵字lambda表示匿名函數,冒號前面的x表示函數的參數,多個參數用‘,‘隔開,返回值就是表達式的結果。
二 、遞歸函數
遞歸函數就是在函數內部調用函數本身。如:
def fact(n): if n==1: return 1 return n * fact(n - 1)
遞歸函數必須有終止條件,否則會導致無限遞歸,使棧溢出。python的遞歸最大深度為1000,但會在深度為998左右出現報錯。
遞歸使用:
1. 遍歷某文件夾中所有文件
import os def read(filepath, n): files = os.listdir(filepath) # 獲取到當前文件夾中的所有文件 for fi in files: # 遍歷文件夾中的文件,這裏獲取的只是本層文件名 fi_d = os.path.join(filepath, fi) if os.path.isdir(fi_d): # 如果該路徑下的文件是文件夾 print("\t"*n, fi) read(fi_d, n+1) # 繼續進行相同的操作 else: print("\t"*n, fi) # 遞歸出口,最終在這裏隱含著return # 遞歸遍歷目錄下所有文件 read(‘e:/pythonDemo‘, 0)
2. 漢諾塔問題
# 無論多少個圓塊,可以抽象成為同一套思路:就是想辦法把(n-1)個a柱上的圓塊先移動到b柱,
# 然後把最底部最大的一個圓塊移動到c柱,最後把b柱上的(n-1)個圓塊移動到c柱 def hanoi(n, a, buffer, c): if n == 1: print(a, ‘--->‘, c) # 定義從a柱移動到c柱的操作 else: hanoi(n-1, a, c, buffer) # 把(n-1)個a柱上的圓塊移動到緩沖區buffer柱 hanoi(1, a, buffer, c) # 把最底部的最大的圓塊移動到c柱 hanoi(n-1, buffer, a, c) # 把(n-1)個緩沖區buffer柱上的圓塊移動到c柱 hanoi(3, ‘A‘, ‘B‘, ‘C‘)
三 、偏函數
函數可以通過設置參數的默認值降低函數調用的難度,偏函數就有這種用處。
如用int()函數實現二進制的轉換:
>>>int(‘101010001‘, base=2) 337
python的functools模塊的partial函數就可以創建一個偏函數:
>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2(‘1010101‘) 85
四 、sorted
python內置的sorted()函數可以對list進行排序,它的key參數控制排序方式是以什麽作為排序參照的,reverse=False/True控制是正向排序還是反向排序。
>>> sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], key=str.lower, reverse=True) [‘Zoo‘, ‘Credit‘, ‘bob‘, ‘about‘]
五 、filter
filter()函數用於過濾序列,函數傳入兩個參數,第一個是一個返回布爾值的函數,第二個是list,filter會將列表中的元素依次傳入第一個函數中,返回值是True的將保留。
def not_empty(s): return s and s.strip() list(filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘ ‘])) # 結果: [‘A‘, ‘B‘, ‘C‘]
六 、map
map()
函數接收兩個參數,一個是函數,一個是Iterable
,map
將傳入的函數依次作用到序列的每個元素,並把結果作為新的Iterator
返回。
>>> r = map(lambda x: x*x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]
七 、reduce
reduce
把一個函數作用在一個序列[x1, x2, x3, ...]
上,這個函數必須接收兩個參數,reduce
把結果繼續和序列的下一個元素做累積計算。
即:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
把序列[1, 3, 5, 7, 9]
變換成整數13579:
>>> from functools import reduce >>> def fn(x, y): ... return x * 10 + y ... >>> reduce(fn, [1, 3, 5, 7, 9]) 13579
Python常用高級函數