【发布时间】:2021-01-06 04:36:27
【问题描述】:
# This version only accepts one argument
# def shout(fn):
# def wrapper(name):
# return fn(name).upper()
# return wrapper
# This version works with any number of args
def shout(fn):
def wrapper(*args, **kwargs):
return fn(*args, **kwargs).upper()
return wrapper
@shout
def greet(name):
return f"Hi, I'm {name}."
@shout
def order(main, side):
return f"Hi, I'd like the {main}, with a side of {side}, please."
@shout
def lol():
return "lol"
print(greet("todd"))
print(order(side="burger", main="fries"))
print(lol())
在上面的代码中,
def wrapper(*args, **kwargs):
print(f"abc is {fn.__name__}")
return fn(*args, **kwargs).upper()
return wrapper
当包装函数执行时,它如何知道要分配给 * args 和 **kwargs 的参数的值。我们这里没有定义参数的值,而是给了 func 参数。
side="burger", main="fries".
**kwargs open up the dictionary but when did we defined such dictionary?
side="burger", main="fries" 如何设置为包装函数的参数,为什么将它们分配给 args 和 kwargs ? 为什么给 fync 的参数分配给包装函数的参数?
【问题讨论】: