python函式式程式設計備忘

2021-07-24 22:05:50 字數 2077 閱讀 4159

本博文總結自廖雪峰老師python教程:

1.在python中,函式名其實是乙個變數,它指向了函式,所以自然的,也可以用其他變數來指向函式。例如f=abs後,就直接能呼叫f(-10)進行計算了。既然函式名是變數,那麼也就可以被傳入另乙個函式了,def add(a,b,f):,然後return f(a)+f(b)。所謂的高階函式,就是讓函式的引數能夠接收別的函式。

2.在python裡函式也可以作為返回值。可以在乙個函式內部繼續定義函式,並返回這個函式,返回這個函式時,這個函式並沒有被執行,當呼叫外部函式時,才會被執行。 例如def lazy_sum(*args):下再定義個def sum():,在這個sum函式下實現累加**,最後整體返回sum函式。那麼,當呼叫時f=lazy_sum([1,2,3,4]),f接收到的實際上是乙個函式,及sum函式,當呼叫f即f()時,才會真正計算求和的結果。

在以上例子中,內部sum函式可以引用外部函式的區域性變數以及傳入的引數,當sum函式被返回時,相關引數和變數都儲存在被返回的函式裡,這種結構被稱為「閉包」。

3.閉包。要牢記乙個準則:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。例如:

def count():

def f(j):

def g():

return j*j

return g

fs =

for i in range(1, 4):

return fs

f1,f2,f3=count()

呼叫f1() , f2() , f3()才能得到正確結果1,4,9。

4.匿名函式,即lambda表示式,其只能是乙個表示式,不用寫return,返回值就是該表示式的結果。匿名函式也可以賦給乙個變數,例如f=lambda x:x*x,呼叫時直接f(5)就行。

5.裝飾器。在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator),即在不改變原函式的情況下,給函式增加功能。

乙個完整的decorator的寫法如下:

import functools

def log(func):

@functools.wraps(func)

print('call %s():' % func.__name__)

return func(*args, **kw)

或者針對帶引數的decorator:

import functools

def log(text):

def decorator(func):

@functools.wraps(func)

print('%s %s():' % (text, func.__name__))

return func(*args, **kw)

return decorator

裝飾器還可參考博文

6.偏函式(partial function)。python的偏函式主要用於簡化函式操作。使用functions.partial來定義函式,它接收三個引數,分別為 函式物件、*args、**kw。例如,定義乙個字串二進位制轉換:int2=functions.partial(int,base=2),然後就可以呼叫了int2('1000000`)結果為64。

以上要注意的是,傳入引數時對於屬性定義,一定要使用命名關鍵字引數,如以上的base=2,不能直接傳入2,不然它會被歸到*args這個可變引數裡面去,這樣就會出錯。

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

Python函式式程式設計

python函式式程式設計的核心思想是 把函式當資料.所以,函式可以用作函式引數,函式返回值,元組或字典成員等 閉包閉包是實現 復用的一種途徑,與類不同的是它基於函式實現.函式與它的環境變數一起就構成了閉包,閉包只有乙個返回值,那就是閉包中的函式 def line conf a,b def line...

python函式式程式設計

一 lambda 主要用來自定義行內函式 二 map 首先定義乙個函式,再用map 命令將函式逐一應用到map列表中的每個元素,最後返回乙個陣列 例如 map lambda x,y x y,a,b 表明將a,b兩個列表的元素對應相乘,把結果返回到新列表。三 reduce 用於遞迴運算 例如 redu...