lambda map filter reduce zip 以及列表推導

最近比較忙, 很久沒寫博客了, 如今起, 堅定跟上. 此次簡單記錄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))複製代碼
  • python3reduce被移到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循環的開銷
相關文章
相關標籤/搜索