我可以在 python 中使用 lambda
函数或一些更 pythonic 的表达式来实现计数器吗?
这是我的代码:
counter = 0
if 0 < arrival_time:
counter += 1
else:
pass
这是我尝试过的:
count_late = lambda x, arrival_time: x+=1 if 0 < arrival_time else pass
counter_late(counter, arrival_time)
我缺少什么或如何改进此代码?
最佳答案
两者都是 x+=1
和 pass
是语句,但是 lambda
是一个表达式,不能将语句放在表达式中。
不过没关系。
lambda
和 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
意味着。
所以,您可能想要:
- 将其设为
return
的纯函数是一个值(如上所述,这意味着您可以使用lambda
,有些人会对此感到满意,但我仍然肯定更喜欢这里的def
),或者 - 使它成为某个具有
self.x
的对象的方法, 或 - 制作
x
一个全局性的。
关于python - 如何使用 lambda 实现计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145069/