为了账号安全,请及时绑定邮箱和手机立即绑定

用f.__name__不就行了为什么一定要用这个functools

如题,这个functools还有什么其他意义么?就是为了不改变原函数属性吗,那之前直接call f.__name__ ( )打印出来的依旧是原函数名啊,不好意思了有谁能给我解释下么0.0

正在回答

3 回答

如果被装饰器封装之后,f变量指向的函数已经不是函数f了(2-11有讲),而是装饰器函数,所以直接用f.__name__打出来也不是f了,这一节有例子的。如果想打印出f,就需要对f变量的属性重新赋值,这也就是functools的作用

@new_fn

def f1(x):

    return x*2

相当于

def f1(x):

    return x*2

f1 = new_fn(f1)

我记得有一句,f1的原始定义函数被完全隐藏了

所以想要保留之前的属性的话就要在被替代前重新赋值给新的函数


1 回复 有任何疑惑可以回复我~

之前能用call f.__name__()打印出原函数名是因为运行print的时候还没有被封装,后面程序完全运行之后你再print f.__name__ 就不是原函数名了。

0 回复 有任何疑惑可以回复我~

用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待

冻结部分函数位置函数或关键字参数,简化函数,更少更灵活的函数参数调用


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

用f.__name__不就行了为什么一定要用这个functools

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信