我不明白为什么我们要用args[0][“valid”]而不是args[“valid”]
user1 = {
'name': 'Sorna',
'valid': True
}
def authenticated(fn):
def wrapper(*args, **kwargs):
if args[0]['valid']== True: #if args['valid']== True:
return fn(*args, **kwargs)
return wrapper
@authenticated
def message_friends(user):
print('message has been sdent')
message_friends(user1)
乍一看,
authenticated
似乎能够包装任何函数,因此必须定义wrapper
以接受任何可能的参数组合:多个位置参数、任意关键字参数等但是,只有第一个位置参数
args[0]
在决定是否应该调用原始函数(绑定到fn
)时才有意义设计中隐含的是
authenticated
只能安全地应用于其第一个位置参数是以'valid'
为键的可映射值的函数*args
捕获传递给它的任何非关键字参数。通过调用message_friends(user1)
,您将user1
作为唯一(非关键字)参数传递,这意味着您必须通过*args
访问它*args
始终作为元组传递,因此需要使用索引来访问内容:输出:
或者,您可以将
user1
作为kwargs传递,以除去索引:输出:
相关问题 更多 >
编程相关推荐