may*_*may 1 python lambda counter if-statement
我可以使用lambdapython中的函数或某些更pythonic的表达式来实现计数器吗?
这是我的代码:
counter = 0
if 0 < arrival_time:
counter += 1
else:
pass
Run Code Online (Sandbox Code Playgroud)
这是我试过的:
count_late = lambda x, arrival_time: x+=1 if 0 < arrival_time else pass
counter_late(counter, arrival_time)
Run Code Online (Sandbox Code Playgroud)
我缺少什么或如何改进此代码?
这两个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
Run Code Online (Sandbox Code Playgroud)
但是,值得注意的是,虽然这是现在有效的语法,但它不会有任何好处.
数字是不可改变的; 没有办法将数字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一个全球性的.| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |