1、map/reduce函式
map(函式,iterable):把傳入的函式依次作用在序列的每個元素上,並將結果作為乙個新的iterable返回。
例子:使用者輸入的英文名字,首字母大寫,其他小寫
# -*- coding: utf-8 -*-
def normalize(name):
return name[0].upper()+name[1:].lower()
l1 = ['adam', 'lisa', 'bart']
l2 = list(map(normalize, l1))
print(l2)
reduce(函式,序列):函式必須接受兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算。
例子:編寫乙個prod()函式,可以接受乙個list並利用reduce()求積
# -*- coding: utf-8 -*-
from functools import reduce
def prod(l):
return reduce(lambda x,y:x*y,l)
2、filter函式
filter(函式,序列):用於過濾序列,返回的結果是序列中滿足函式的元素。
注意:filter()
函式返回的是乙個iterator
,也就是乙個惰性序列,所以要強迫filter()
完成計算結果,需要用list()
函式獲得所有結果並返回list。
3、sorted函式
排序函式
對數字:sorted(list):對list中的數字公升序排
自定義的排序:sorted(list,key=函式),key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序
注意!!:key指定的函式不是作用於list,而是list裡的每個元素
降序排序:sorted(list,key=函式,reverse=ture)
函式作為返回值,呼叫時,並不是立馬執行。
如:
def 函式名():呼叫時,f=函式名(),此時,相當於f為 函式名2的函式,需要再呼叫一下 f()def 函式名1():
...return value
return 函式名1
注意:每次呼叫都是乙個新的函式,即使傳入相同的引數,也不同。
閉包:相關引數和變數都儲存在返回函式中的程式結構
返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。因為並不是立刻執行,等到函式都返回時,其引用的變數變為最後乙個值。
注意全域性變數和區域性變數
在閉包中,引用外部變數,報錯:unboundlocaerror
解決辦法:1、為變數申明全域性變數 global
2、python中關鍵字:nonlocal(指向之前在最近的包含作用域中繫結的除全域性變數以外的變數)
3、將變數改為乙個可變的列表。
lambda 引數1,引數2 :表示式
限制:只能有乙個表示式
好處:1、沒有名字,不擔心函式名衝突
2、可以將匿名函式賦值給乙個變數,再利用變數來呼叫該函式
3、作為返回值返回
定義:在**執行期間動態增加功能的方式
decorator本質上就是乙個返回函式的高階函式。例:定義乙個能列印日誌的decorator
def log(func):
print('call %s():' % func.__name__)
return func(*args, **kw)
將decorator置於函式的定義處
@log呼叫now()函式:def now():
print('2015-3-25')
>>> now()當函式的引數個數太多,需要簡化時,使用functools.partial可以傳建乙個新函式,這個新函式可以固定住原函式的部分引數,從而在呼叫時更簡單。call now():
2015-3-25
例:固定了int()函式的關鍵字引數base。使預設按二進位制轉換。
int2 = functools.partial(int, base=2)建立偏函式時,實際可以接受:函式物件、*args和**kw三個引數。
當傳入*args時,如: 會把10作為*args的一部分自動加到左邊
max2 = functools.partial(max, 10)
python學習(四) 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...
python學習筆記(四) 函式式程式設計
1 高階函式 高階函式 higher order function 1 變數可以指向函式 函式本身也可以賦值給變數。2 函式名也是變數 指向函式的變數。3 傳入函式 變數能夠指向函式,函式的引數能接收變數,乙個函式就可以接收另乙個函式作為引數。接收兩個引數 函式,iterable map 將傳入的函...
Python學習 函式式程式設計
高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。我們來實現乙個可變引數的求和。通常情況下,求和的函式是這樣定義的 def calc sum args ax 0 for n in args ax ax n return ax 但是,如果不需要立刻求和,而是在後面的 中,根據需要再計算怎...