Python字典存储lambda函数后checks[check](uid)写法运行原理疑问
语法运行逻辑解释
这是Python中函数作为一等公民的典型用法,你可以把这个写法拆解为两步独立操作,合并之后就是你看到的形式:
- 首先执行
checks[check]:从checks字典中取出对应key的值,你给出的代码里checks字典的所有value都是接收1个uid参数的lambda匿名函数对象,因此这一步的返回结果是一个可直接调用的函数 - 之后直接加
(uid):就是对第一步取到的函数对象发起调用,将uid作为入参传入,最终得到该校验规则的判断结果
你完全可以把这行代码拆成两行写,运行效果完全一致:
# 从字典取出校验函数 current_check_func = checks[check] # 调用函数传参uid,拿到校验结果 check_result = current_check_func(uid)
为了更方便理解,你可以参考下面这个极简的同逻辑示例:
def add(a, b): return a + b def multiply(a, b): return a * b # 字典的值直接存储函数对象 calc_ops = { "求和": add, "求积": multiply } # 直接取出函数后传参调用,和你疑问的写法逻辑完全相同 print(calc_ops["求和"](2, 3)) # 输出5 print(calc_ops["求积"](2, 3)) # 输出6
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

