Discuss / Python / 有个问题想问下。。

有个问题想问下。。

Topic source

吾非名家

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

def wrapper(args, **kw): print('%s %s():' % (text, func.name)) return func(args, **kw)

这个函数的定义,参数一定要带上args和*kw吗?

吾非名家

#2 Created at ... [Delete] [Delete and Lock User]
 def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)

额。。再发一次,刚刚的有问题。。。

这个函数的定义,参数一定要带上*args**kw吗?

灰_手

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

一定,这两个参数同时出现就代表所有参数的意思。

可以不加的,如果你可以确保你的函数也是不带参数的

在此插入代码

func()函数明明没有参数啊,在wrapper()里面却return func(args,*kw)是为什么呢?

我的理解,不是说func()没有参数,这里面的func就只有是指@后面带到的那个主体函数。 而且wrapper,带这两个参数,是确保这是一个通用函数,也就是说, 带上这两个参数以后,其实func(args,*kw)代表的是所有函数。世界上,所有的函数,都被这个函数代指了。也就变相的实现了不管func是什么样的函数,都可以成功继续执行这个主体函数。

我的理解好像也不是很透彻,讲的自己也有点稀里糊涂。。

灰_手

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

当你用上*args, **kw的时候,任何参数的函数都能使用此装饰器,否则会有某些参数没传递的问题。一个装饰器只是附加的作用,原则上不能影响原函数,也不应该限定被装饰函数的类型,所以这里是必须这样写的。


  • 1

Reply