Discuss / Python / functools.wraps

functools.wraps

Topic source

脱离语言

#1 Created at ... [Delete] [Delete and Lock User]

没看出来functools.wraps到底是干什么用的,不写好像也没影响

下面代码,不把注释部分解开的话执行结果是“wrapper”,而不是“now”。说明不加这句话,外部调用函数属性会出问题。

#import functools

def log(text): def decorator(func): #@functools.wraps(func) def wrapper(*args, **kw): print('%s %s():' % (text, func.__name__)) return func(*args, **kw) return wrapper return decorator

@log('execute')

def now(): print('2015-3-25')

print(now.__name__)

MisMusic

#3 Created at ... [Delete] [Delete and Lock User]

好像不加就变成了调用wrapper函数,加了还是now函数自己本身

可以用now.name来打印出来看看,看是wrapper还是now自己本身

不懂不要紧,感觉有点明白就行,既然教程上面说了就这样写比较好,感觉不能纠结太多,写程序不能太纠结于某一个点,实在无法理解就跳过,否则会影响学习的心态

greatzues

#4 Created at ... [Delete] [Delete and Lock User]

老师不是说了吗,目前不加是可以的,只是对于需要依赖函数签名的代码执行就会出错了,因此这个装饰函数返回的是 wrapper


  • 1

Reply