【发布时间】:2018-08-12 10:05:13
【问题描述】:
示例:为什么 dictuse1 返回值但 dictuse2 返回地址如下所示
def dictuse1(operator,x,y):
return{
'add':lambda:x + y,
'sub':lambda:x - y,
'mul':lambda:x * y,
'div':lambda:x / y,
}.get(operator,lambda:None)()
def dictuse2(operator,x,y):
return{
'add':lambda:x + y,
'sub':lambda:x - y,
'mul':lambda:x * y,
'div':lambda:x / y,
}.get(operator,lambda:None) #No parentheses here compared to previous function
d = dictuse1('add',8,9)
print(d) #return 17
a = dictuse2('a',5,4)
print(a) #returns:<function dictuse.<locals>.<lambda> at 0x7f30d23f3ea0>
【问题讨论】:
-
顺便说一句,使用
operator作为变量名不是一个好主意,因为它是标准模块的名称。顺便说一句,该模块在此代码中很有用,因为它定义了您使用 lambda 定义的函数。 -
@PM2Ring 我不确定
operator在这里是否真的有帮助,因为这些函数都是x和y参数上的无效闭包,所以你必须写类似的东西functools.partial(operator.add, x, y),这并没有您通常从模块中获得的好处。但总的来说,这绝对是个好建议。 -
@abarnert 啊,好点子。
标签: python python-3.x switch-statement