四 Python函式式程式設計 學習筆記

2021-09-24 23:15:08 字數 3037 閱讀 9568

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  函式名():

def 函式名1():

...return value

return 函式名1

呼叫時,f=函式名(),此時,相當於f為 函式名2的函式,需要再呼叫一下 f()

注意:每次呼叫都是乙個新的函式,即使傳入相同的引數,也不同。

閉包:相關引數和變數都儲存在返回函式中的程式結構

返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數因為並不是立刻執行,等到函式都返回時,其引用的變數變為最後乙個值。

注意全域性變數區域性變數

在閉包中,引用外部變數,報錯: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

def now():

print('2015-3-25')

呼叫now()函式:

>>> now()

call now():

2015-3-25

當函式的引數個數太多,需要簡化時,使用functools.partial可以傳建乙個新函式,這個新函式可以固定住原函式的部分引數,從而在呼叫時更簡單。

例:固定了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 但是,如果不需要立刻求和,而是在後面的 中,根據需要再計算怎...