ホームページ  >  記事  >  バックエンド開発  >  Python の functools モジュールの一般的な関数の分析

Python の functools モジュールの一般的な関数の分析

高洛峰
高洛峰オリジナル
2017-03-01 13:50:241587ブラウズ

1.partial

1 つ目は部分関数です。これは、関数のオプションのパラメーターを再バインドし、呼び出し可能な部分オブジェクトを生成できます。パラメータを選択するときは、パラメータ名を記述する必要があることに注意してください。

2.update_wrapper

次に、カプセル化された関数の __name__、__module__、__doc__、__dict__ をカプセル化関数にコピーできる update_wrapper 関数があります。

りー

しかし、結局のところ、代入ステートメントが 4 行減っただけです。

3.wraps

次に、update_wrapper もカプセル化するラップ関数があります:

>>> int('10') # 实际上等同于int('10', base=10)和int('10', 10) 
10 
>>> int('10', 2) # 实际上是int('10', base=2)的缩写 
2 
>>> from functools import partial 
>>> int2 = partial(int, 2) # 这里我没写base,结果就出错了 
>>> int2('10') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: an integer is required 
>>> int2 = partial(int, base=2) # 把base参数绑定在int2这个函数里 
>>> int2(&#39;10&#39;) # 现在缺省参数base被设为2了 
2 
>>> int2(&#39;10&#39;, 3) # 没加base,结果又出错了 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: keyword parameter &#39;base&#39; was given by position and by name 
>>> int2(&#39;10&#39;, base=3) 
3 
>>> type(int2) 
<type &#39;functools.partial&#39;>

結果は同じです: _ordering

最後にtotal_ordering 関数は、クラスに豊富な並べ替えメソッドを提供し、デコレーターを使用して操作を簡素化します。使用する場合は、__lt__()、__le__()、__gt__()、または __ge__() をクラス内で定義する必要があります。 __eq__() メソッドをクラスに追加する必要があります。

#-*- coding: gbk -*- 
 
def thisIsliving(fun): 
 def living(*args, **kw): 
  return fun(*args, **kw) + &#39;活着就是吃嘛。&#39; 
 return living 
 
@thisIsliving 
def whatIsLiving(): 
 "什么是活着" 
 return &#39;对啊,怎样才算活着呢?&#39; 
 
print whatIsLiving() 
print whatIsLiving.__doc__ 
 
print 
 
from functools import update_wrapper 
def thisIsliving(fun): 
 def living(*args, **kw): 
  return fun(*args, **kw) + &#39;活着就是吃嘛。&#39; 
 return update_wrapper(living, fun) 
 
@thisIsliving 
def whatIsLiving(): 
 "什么是活着" 
 return &#39;对啊,怎样才算活着呢?&#39; 
 
print whatIsLiving() 
print whatIsLiving.__doc__


結果を印刷

对啊,怎样才算活着呢?活着就是吃嘛。
None

对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着


Python の functools モジュールの共通関数分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。