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相关文章,请点击: