python代码,如何理解functools中的wraps和partial函数?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
python
代码,如何理解functools
类中的wraps
和partial
函数?从目前的情况来看,functools
类中的方法,都是一些非常神奇的函数,每个都具有非常神奇的功能。本文中,对其中的wraps
和partial
进行一下了解。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。wraps
方法如何解决__doc__
和__name__
的问题?partial
方法如何重新包装一个已有函数?
本文测试环境:win10
,python@3.6.8
。
wraps
测试代码:
from functools import wraps
def examination2(func):
@wraps(func)
def anyname2(*args, **kwargs):
''' anydoc2 '''
print("准备参加考试2")
func(*args, **kwargs)
print("通过考试拿到证书2")
return anyname2
@examination2
def exam(language="西班牙语"):
''' doc '''
print("参加了考试2"+language)
print(exam.__name__, exam.__doc__)
如果没有使用@wraps
把装饰器中的闭包给修饰一下的话,那么被装饰器修饰的函数的__name__
和__doc__
等变量都会被修改。所以,@wraps
就是用于保持被修饰器修饰的某些函数的某些系统变量的。
具体内容,可以参考下面的链接:
partial
这个partial
也是个很神奇的方法,它可以对已有的函数,传入部分参数,然后获得一个新的函数。新的函数中再传入剩下的参数,就可以被执行了。是不是特别神奇?
import functools
def fn(args1, args2):
if(args1 == ""):
raise TypeError
return [args1, args2]
t = functools.partial(fn) # 新的函数t
print(t("a1", "a2"))
t2 = functools.partial(fn, "a1") # 新的函数t2
print(t2("a2"))
t3 = functools.partial(fn, "a1", "a2") # 新的函数t3
print(t3())
functools.partial
可以传零个参数到所有参数,剩下的参数(如果有)在新的函数里面再次传递。
另一种表述
上述代码也可以表述为:
from functools import partial
def fn(args1, args2):
if(args1 == ""):
raise TypeError
return [args1, args2]
t = partial(fn) # 新的函数t
print(t("a1", "a2"))
区别对比:
引入方式 | 使用方式 |
---|---|
from functools import partial | partial(fn) |
import functools | functools.partial(fn) |
相关文章
- https://newsn.net/say/python-decorators-2.html
- https://newsn.net/say/python-decorators.html
- https://newsn.net/say/python-def.html
综述
本文中,主要描述了两个较奇特的函数,分别是wraps()
和partial()
,都来自于系统默认的functools
类。更多python
相关文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。