Maison > Article > développement back-end > Analyse des fonctions courantes dans le module functools en Python
1.partial
La première est la fonction partielle, qui peut relier les paramètres facultatifs de la fonction et générer un objet partiel appelable :
>>> 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('10') # 现在缺省参数base被设为2了 2 >>> int2('10', 3) # 没加base,结果又出错了 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: keyword parameter 'base' was given by position and by name >>> int2('10', base=3) 3 >>> type(int2) <type 'functools.partial'>
Comme on peut le voir, la seule chose à noter est que le paramètre facultatif doit écrire le nom du paramètre.
2.update_wrapper
Ensuite, il y a la fonction update_wrapper, qui peut copier le __name__, __module__, __doc__ et __dict__ de la fonction encapsulée vers la fonction d'encapsulation :
#-*- 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) @thisIsliving def whatIsLiving(): "什么是活着" return '对啊,怎样才算活着呢?' print whatIsLiving() print whatIsLiving.__doc__
Résultat :
对啊,怎样才算活着呢?活着就是吃嘛。 None 对啊,怎样才算活着呢?活着就是吃嘛。 什么是活着
Mais ça ne sert pas à grand chose, après tout , c'est juste 4 lignes de moins d'instructions d'affectation écrites.
3.wraps
Ensuite, il y a la fonction wraps, qui encapsule également 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__
Le résultat est toujours le même :
对啊,怎样才算活着呢?活着就是吃嘛。 什么是活着
4.total_ordering
Enfin, la fonction total_ordering est étant donné des méthodes de tri riches en classes, utilisant des décorateurs pour simplifier les opérations. S'il est utilisé, un __lt__(), __le__(), __gt__() ou __ge__() doit être défini dans la classe. Une méthode __eq__() doit être ajoutée à la classe.
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])
Imprimer les résultats
False <__main__.Student object at 0x7f16ecb194d0> [<__main__.Student object at 0x7f16ecb194d0>, <__main__.Student object at 0x7f16ecb195d0>]
Pour plus d'articles liés à l'analyse des fonctions courantes du module functools en Python, veuillez faire attention au site Web PHP chinois !