python 函式式程式設計2

2021-09-27 04:24:20 字數 2017 閱讀 1956

既可以接收函式作為引數,也可以把函式作為返回值。

閉包:我們在函式lazy_sum中又定義了函式sum,並且,內部函式sum可以引用外部函式lazy_sum的引數和區域性變數,當lazy_sum返回函式sum時,相關引數和變數都儲存在返回的函式中,這種稱為「閉包(closure)」的程式結構擁有極大的威力。

當我們呼叫lazy_sum()時,每次呼叫都會返回乙個新的函式,即使傳入相同的引數,也是不一樣的。

返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。

list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
匿名函式lambda x:x*x其實就是

def f(x):

return x * x

關鍵字lambda表示匿名函式,冒號前面的x表示函式引數

匿名函式有個限制,就是只能有乙個表示式,不用寫return,返回值就是該表示式的結果。

用匿名函式有個好處,因為函式沒有名字,不必擔心函式名衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式,也可以把匿名函式作為返回值返回

return lambda:x*x+y*y
函式物件可以被賦值給變數,通過這個變數也可以呼叫這個函式。

函式物件有乙個__name__屬性,可以拿到函式的名字,對變數使用可知它對應的函式。

假設我們要增強now()函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now()函式的定義,這種在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator)

本質上,decorator就是乙個返回函式的高階函式。所以,我們要定義乙個能列印日誌的decorator

def log(func):

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

return func(*args, **kw)

log是乙個裝飾器,所以接受乙個函式作為引數,並返回乙個函式。我們要借助python的@語法,把decorator置於函式的定義處

@log

def now():

print('2015-3-25')

呼叫now()函式,不僅會執行now()函式本身,還會在執行now()函式前列印一行日誌:

>>> now()

call now():

2015-3-25

@log放到now()函式的定義處,相當於執行了語句:

now = log(now)
也可以多層巢狀,傳入乙個text

int()函式還提供額外的base引數,預設值為10。如果傳入base引數,就可以做n進製的轉換

functools.partial就是幫助我們建立乙個偏函式的,不需要我們自己定義int2(),可以直接使用下面的**建立乙個新的函式int2

所以,簡單總結functools.partial的作用就是,把乙個函式的某些引數給固定住(也就是設定預設值),返回乙個新的函式,呼叫這個新函式會更簡單。

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

函式式程式設計(2)

1.find函式接受乙個集合和乙個謂詞函式,並返回該謂詞為true時的第乙個元素。例 find 1,2,3,4 function num 32.all函式接受乙個集合和乙個謂詞,當對於所以的元素謂詞函式都返回true時,返回true。例 all 2,4,6,8 function num true 判...

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

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

Python函式式程式設計

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