def fn(x): return x*2 L1 = [1,2,3,4,5,6] L2 = list(map(fn,L1)) L2
[2, 4, 6, 8, 10, 12]
經過上面的運行,能夠知道map就是把一個數組內全部的元素都執行map加入的方法。
用法以下 map(方法,數組)java
先看例子python
from functools import reduce def add(x,y): return x + y L1 = [1,2,3,4,5,6] L2 = reduce(add,L1) L2
21
經過上面的例子,直觀的來看,咱們能夠發現reduce和map方法有一些不同。算法
map是對一個集合中的每一個元素執行指定的方法。而reduce則是依次對集合的元素調用指定的方法。先把前兩個參數執行reduce之後造成的返回之做爲第一個參數,再和第三個參數造成返回值,依次執行。編程
filter則是對集合的每一個元素執行一次判斷,能讓filter指定的函數返回真值則返回,不然則不出如今返回集合中。數組
def fn(x): return x%2 ==0 L1 = [1,2,3,4,5,6,7,8] F1 = filter(fn,L1) print(F1) print(list(F1))
<filter object at 0x7f1d38369358> [2, 4, 6, 8]
顧名思義排序。用法以下閉包
sorted(集合,key=排序的算法,reverse=True) #reverse=True若是添加反向排序
def fn(x): def add(y): return x + y return add a = fn(5) a(6)
11
須要注意的是閉包的代碼是到最後執行a(6)的時候,才調用了函數裏面的執行。舉個例子app
def fn(): rs = [] for i in range(4): def sub(): return i rs.append(sub) return rs a,b,c,d = fn() print(a()) print(b()) print(c()) print(d())
3 3 3 3
從上面的例子中,咱們若是沒有理解到返回的函數是在最後加上括號的時候才調用,可能覺得返回之是0,1,2,3
可是實際上def sub()裏面的內容一直都沒執行,可是外面的i 一直到了3.當調用a()的時候。開始執行。因此如上面的返回結果。函數
def efn(): i = 1 def sub(): i = i + 1 return i return sub t = efn() t()
--------------------------------------------------------------------------- UnboundLocalError Traceback (most recent call last) <ipython-input-15-7574f0a729df> in <module>() 7 8 t = efn() ----> 9 t() <ipython-input-15-7574f0a729df> in sub() 2 i = 1 3 def sub(): ----> 4 i = i + 1 5 return i 6 return sub UnboundLocalError: local variable 'i' referenced before assignment
上面的報錯,須要引入關鍵詞nonlocal 以下:學習
def efn(): i = 1 def sub(): #關鍵字 nonlocal i i = i + 1 return i return sub t = efn() print(t()) print(t())
2 3
list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
經過上面的式子咱們簡單能夠看到lambda函數或者匿名函數的意義網站
f = lambda x,y:x + y f(5,6)
11
咱們大概能夠看到lambda函數的:前面至關於參數,後面的是返回數值
個人理解相似java中的AOP或者.net中的面向切片編程
'''好比調用一個方法的時候,咱們指望另一個方法也被調用。好比咱們執行一個操做,指望不改變任何代碼,就能夠打印出來這個方法的日誌''' def log(func): def wraper(*args,**kw): print(func.__name__+' is call to log') return func(*args,**kw) return wraper @log def fn(): print('this is fn') fn()
fn is call to log this is fn
''' 若是咱們但願往log裏面傳遞參數''' def log(text): def decorator(func): def wraper(*args,**kw): print(func.__name__+' is call to log ' + text) return func(*args,**kw) return wraper return decorator @log('hello') def fn(): print('fn') fn() fn.__name__
fn is call to log hello fn 'wraper'
fn的名稱發生了改變,要保持不變,須要@functools.wraps(func)
''' 若是咱們但願往log裏面傳遞參數''' import functools def log(text): def decorator(func): @functools.wraps(func) def wraper(*args,**kw): print(func.__name__+' is call to log ' + text) return func(*args,**kw) return wraper return decorator @log('hello') def fn(): print('fn') fn() fn.__name__
fn is call to log hello fn 'fn'
以上的內容參考學習 廖學峯的學習網站