Both x+=1
and pass
是陈述,但是lambda
是一个表达式,并且不能将语句放入表达式中。
但那很好。
lambda
and def
两者都只是以相同的方式创建一个函数,但是lambda
是比较有限的。
如果需要在表达式中间创建函数,则必须使用lambda
- 但这里的情况并非如此,因为您创建它只是为了在赋值语句中使用。
如果函数没有好的名称,您可能需要使用lambda
,但这里的情况也不是这样,因为您立即给它起了一个名字。
有些人(主要是那些花了太多时间使用 Lisp 或 ML 系列函数语言的人)也喜欢使用lambda
为了表明他们正在编写一个“纯函数”,它没有副作用,并且返回一个仅取决于其参数值的值。但这里的情况也不是这样。 (如果你把它改成lambda x, arrival_time: x+1 if 0 < arrival_time else x
,这将是纯函数的一个很好的例子。然后你可以用例如x = count_late(x)
.)
所以,完全没有理由使用lambda
首先在这里。只需使用def
:
def count_late(x, arrival_time):
if 0 < arrival_time:
x += 1
然而,值得注意的是,虽然这现在是有效的语法,但它不会有任何好处。
数字是不可变的;没有办法改变号码2
进入数字3
,因为那会破坏所有的物理学。当你写的时候x += 1
,这只是使局部变量x
为号码命名3
而不是号码的名称2
。如果你用count_late(spam, 5)
它不会改变什么spam
意思是,就像你用count_late(2*3, 5)
它不会改变什么2*3
means.
所以,您可能想要:
- 使其成为一个纯函数
return
s 一个值(如上所述,这意味着你could use lambda
,有些人会对此感到高兴,但我仍然肯定更喜欢def
此处),或
- 使其成为某个对象的方法,该对象具有
self.x
, or
- Make
x
一个全球性的。