How to implement a counter using a lambda?(如何使用lambda实现计数器?)
本文介绍了如何使用lambda实现计数器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是否可以使用python中的lambda函数或更具Python语风格的表达式来实现计数器?
以下是我的代码:
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,但这里也不是这样,因为您会立即为其命名。
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成为全局。
这篇关于如何使用lambda实现计数器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:如何使用lambda实现计数器?
基础教程推荐
猜你喜欢
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
