最近比較忙, 很久沒寫博客了, 如今起, 堅定跟上. 此次簡單記錄python
中的經常使用特殊技巧方法.python
lambda
匿名函數篇函數
lambda c: c>10
def func(c): return c > 10
(lambda *argv: [item for item in argv])(1,2,3,4,5)
(lambda **kargv:[item for item in kargv.items()])(a=1,b=2,c=3)複製代碼
lambda
表達式聲明的匿名函數, 和常規的def
聲明函數具備一樣的效果. lambda
多用於函數體簡單以及該函數不會被重複調用屢次的狀況lambda
能夠接受多個參數, 不定參數以及鍵值對map(func, iter)
函數篇spa
map(ord, '!@#$%^&*()_+')複製代碼
map
函數接受一個函數名func
以及一個迭代器iter
map
函數將iter
中的元素依次傳入func
中執行, 並返回func
執行後的結果組成的結果集, 該結果集是一個map
類型的迭代器map
函數也能夠接受lambda
函數作參數filter(func,iter)
函數篇code
filter(lambda x: x > 64, map(ord, '!@#$%^&*()_+'))複製代碼
filter
函數接受參數同map
函數func
用於過濾iter
中的內容, 而map
中的函數用於對iter
中元素作同一處理filter
類型的迭代器reduce(func, iter)
函數篇ip
from functools import reduce
reduce(lambda sum_res, next_res: sum_res + next_res, range(10))複製代碼
python3
中reduce
被移到functools
中reduce
可接受的參數同map
函數同樣, 不一樣的是前者接受的func
必須能夠接受兩個參數, 第一個參數會自動傳入當前iter
的元素結果集, 第二個參數會自動傳入iter
的下一個元素. 最後返回iter
中每一個元素按照func
規則做用以後的結果zip(iter01.iter02)
函數篇博客
zip(['a', 'b', 'c', 'd'], {1,2,3})
zip(*zip(['a', 'b', 'c', 'd'], {1, 2, 3}))複製代碼
zip
接受多個iter
, 並將iter
按照最少元素的那個對應打包成元組, 返回一個zip
類型的迭代器, 該迭代器中的元素爲前邊打包完成的元組zip
也支持解包操做, 將打包的迭代器拆分紅多個元組列表推導篇string
[i for i in range(10)]
{i:i for i in range(10)}
{i for i in range(10)}
colors=['black','whiite']
sizes={'S','M','L'}
[(color,size) for color in colors for size in sizes]複製代碼
生成器表達式篇it
(i for i in range(20))
tuple(i for i in range(20))
list(i for i in range(20))複製代碼
for
循環時候才生成組合, 能夠減小for
循環的開銷