课程
/后端开发
/Python
/python进阶
如题,这个functools还有什么其他意义么?就是为了不改变原函数属性吗,那之前直接call f.__name__ ( )打印出来的依旧是原函数名啊,不好意思了有谁能给我解释下么0.0
2018-03-21
源自:python进阶 2-14
正在回答
如果被装饰器封装之后,f变量指向的函数已经不是函数f了(2-11有讲),而是装饰器函数,所以直接用f.__name__打出来也不是f了,这一节有例子的。如果想打印出f,就需要对f变量的属性重新赋值,这也就是functools的作用
@new_fn
def f1(x):
return x*2
相当于
f1 = new_fn(f1)
我记得有一句,f1的原始定义函数被完全隐藏了
所以想要保留之前的属性的话就要在被替代前重新赋值给新的函数
之前能用call f.__name__()打印出原函数名是因为运行print的时候还没有被封装,后面程序完全运行之后你再print f.__name__ 就不是原函数名了。
用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待
冻结部分函数位置函数或关键字参数,简化函数,更少更灵活的函数参数调用
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计