python - 如何使用 lambda 实现计数器?

标签 python if-statement lambda counter

我可以在 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)

错误: enter image description here

我缺少什么或如何改进此代码?

最佳答案

两者都是 x+=1pass是语句,但是 lambda是一个表达式,不能将语句放在表达式中。

不过没关系。

lambdadef两者都以相同的方式创建一个函数,但是 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/

相关文章:

python - 如何按行值过滤和分组条目

python - 如何在列表中返回列表的元素?

python - 在for循环Python中的if语句中将一个键的值分配给另一个键

java - 如果条件语句错误“存在编码标准违规(Java)

json - AWS Lambda Kinesis消费者-js中的kinesis数据json

linq - 如何将 Linq/Lambda 与 ObservableCollection<T> 结合使用

python - pyspark/数据框 : replace null with empty space

python - 合并 Python 列表中的一些列表项

python - 推特/社交数据挖掘——Ruby 还是 Django?

c - 如何用C找到数组中3个最大的偶数?