Python中functools模組的常用函式解析

2022-10-04 21:45:34 字數 3008 閱讀 1184

1.partial

首先是partial函式,它可以重新繫結函式的可選引數,生成乙個callable的partial物件:

>>> int('10') # 實際上等同於int('10', base=10)和int('10', 10)

10 >>> int('10', 2) # 實際上是int('10', base=2)的縮寫

2 >>> from functools import partial

>>> inwww.cppcns.comt2 = partial(int, 2) # 這裡我沒寫base,結果就出錯了

>>> int2('10')

traceback (most recent call last):

file "", line 1, in

typeerror: an integer is required

>>> int2 = partial(int, base=2) # 把base引數繫結在int2這個函式裡

>>> int2('10') # 現在預設引數base被設為2了

2 >>> int2('10', 3程式設計客棧) # 沒加base,結果又出錯了

traceback (most recent call last):

file "", line 1, in

typeerror: keyword parameter 'base' was given by position and by name

>>> int2('10', base=3)

3 >>> type(int2)

從中可以看出,唯一要注意的是可選引數必須寫出引數名。

2.update_wrapper

接著是update_wrapper函式,它可以把被封裝函式的__name__、__module__、__doc__和 __dict__都複製到封裝函式去:

#-*- coding: gbk -*-

def thisisliving(fun):

def living(*args, **kw):

return fun(*args, **kw) + '活著就是吃嘛。'

return living

@thisisliving

def whatisliving():

"什麼是活著"

return '對啊,怎樣才算活著呢?'

print whatisliving()

print whatisliving.__doc__

print

from functools import update_wrapper

def thisisliving(fun):

def living(*args, **kw):

return fun(*args, **kw) + '活著就是吃嘛。'

return update_wrapper(living, fun)

mbrqklxa

@thisisliving

def whatisliving():

"什麼是活著"

return '對啊,怎樣才算活著呢?'

print whatisliving()

print whatisliving.__doc__

結果:對啊,怎樣才算活著呢?活著就是吃嘛。

none

對啊,怎樣才算活著呢?活著就是吃嘛。

什麼是活著

不過也沒多大用處,畢竟只是少寫了4行賦值語句而已。

3.wraps

再有是w函式,它將update_wrapper也封裝了進來:

#-*- coding: gbk -*-

from functools import wraps

def thisisliving(fun):

@wraps(fun)

def living(*args, **kw):

return fun(*args, **kw) + '活著就是吃嘛。'

return living

@thisisliving

def whatisliving():

"什麼是活著"

return '對啊,怎樣才算活著呢?'

print whatisliving()

print whatisliving.__doc__

結果還是一樣的:

對啊,怎樣才算活著呢?活著就是吃嘛。

什麼是活著

4.total_ordering

最後至於total_ordering函式則給予類豐富的排序方法,使用裝飾器簡化了操作。如果使用必須在類裡面定義乙個__lt__(),__le__(), __gt__(), 或__ge__()。應該給類新增乙個__eq__() 方法。

from functools import total_ordering

@total_ordering

class student(object):

def __init__(self, name):

self.name = name

def __eq__(self, other):

return self.name.lower() == other.name.lower()

def __lt__(self, other):

return self.name.lower() < other.name.lower()

a = student('dan'

b = student('mink')

print a > b

print a

print sorted([b, a])

列印結果

false

<__main__.student object at>

[<__main__.student object at>, <__main__.student object at>]

本文標題: python中functools模組的常用函式解析

本文位址:

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中否定for 在python中否定函式

有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...

python中雙重迴圈 加速Python中的雙迴圈

有沒有辦法加快從上一次迭代更新其值的雙迴圈?在 中 def calc n,m x 1.0 y 2.0 container np.zeros n,2 for i in range n for j in range m x np.random.gamma 3,1.0 y y 4 y np.random....