我想在dict中写一个函数:
A = {
'a': 6,
'b': 3,
'operation': def myfunc(x, y):
# do many things here, I can't use a lambda x,y: ...
return x + y
}
但这不起作用。 为什么?有没有办法让它发挥作用?
备注:以下解决方案有效,但我更愿意在 dict中编写函数:
def myfunc(x, y): return x + y
A = {
'a': 6,
'b': 3,
'operation': myfunc
}
答案 0 :(得分:6)
但这不起作用。的为什么吗
使用def
的函数定义为(compound) statements。语句是Python语言语法中的top-level component。语句可以包含expressions,但表达式不能包含语句,只能包含其他表达式。
字典文字是an expression,因此它只能包含其他表达式,而不能包含def
语句。
有没有办法让它发挥作用?
您的选择是使用表达式。 lambda
或您之前定义的函数的引用(如您所发现的)。
lamdba
是表达式,它们只能包含更多表达式,这些表达式隐式生成返回值。您不能使用return
或作业等内容,因为这些是陈述,因此它们非常有限。如果lambda
无法执行您想要的操作,那么您唯一的选择就是执行您已经执行的操作,并存储对函数对象的引用。