Python中的Lua风格

Python中的Lua风格,python,lua,Python,Lua,变量a不存在 我可以用Lua语言写: a = (a or 0) + 1 现在a=1 这允许我不预先声明变量“a”。这类似于 a = 0 a = a + 1 如何在Python中实现同样的功能 a = (a or 0) + 1 附:为什么它很重要?要避免为变量指定零,请执行以下操作: python(4行代码): lua(2行代码): 对于您的用例,我建议使用defaultdict: from collections import defaultdict d = defaultdict(in

变量a不存在

我可以用Lua语言写:

a = (a or 0) + 1
现在a=1

这允许我不预先声明变量“a”。这类似于

a = 0
a = a + 1
如何在Python中实现同样的功能

a = (a or 0) + 1
附:为什么它很重要?要避免为变量指定零,请执行以下操作:

python(4行代码):

lua(2行代码):


对于您的用例,我建议使用
defaultdict

from collections import defaultdict

d = defaultdict(int)
d["counter"] += 5
print(d.items()) # output: dict_items([('counter', 5)])
但是- 我认为这不是一个好的做法,但您可以使用
locals()
globals()
在所需范围内动态访问变量:

a = 1
print(locals().get("a")) # ouput:1

c = locals().get("c", 2) + 1 
print(c) # output 3

Python确实有一个三元运算符,就像Lua和许多其他语言一样

但与Lua不同,Python不会将未定义的变量作为“false”值处理,如果您试图计算未定义的变量,它将抛出一个错误。特别是在您的情况下,您将收到一个键错误,原因是键
滴答器不存在

Lua三元:

total_volume[ticker]=(total_volume[ticker]或0)+a
Python等价物:

total_volume[ticker]=(如果ticker在total_volume中,则total_volume[ticker]为0)+a
如果Lua将传递
之前的值(如果它是
truthy
),那么当后面的语句是
true
时,python将传递
if
之前的值,当它是
false
时,将传递
else
之后的值

为了安全地评估密钥是否在字典中,我们可以使用
中的

这主要是为了演示您在Lua中使用的三元操作,以及如何在Python中实现它,但这并不意味着它是解决此问题的正确工具


我建议采用更清洁的解决方案:

total_volume[ticker]=总的_volume.get(ticker,0)+1

代码更少,更容易推理
get
将返回
total_volume[ticker]
或者如果字典中没有键,它将返回默认值,
0

我想
a=(None或0)+1
会满足您的要求,但是我看不到一个用例。这样做比第一次定义
a=0
有什么好处?@deveshkumarsing亲爱的朋友,它节省了很多行代码code@LydiavanDyke我编辑了要回答的问题You@IgorK.:“亲爱的朋友,它保存了许多行代码”它只保存了一行代码。您可以轻松地在循环中声明一个局部变量,该变量包含值或0(如果值为无),然后向局部变量添加一个。也可以使用标准dict执行此操作:
d[“counter”]=d.get(“counter”,0)+5
谢谢!哪一个更快?这对我来说很重要,因为我在数百万行数据文件中使用它。
from collections import defaultdict

d = defaultdict(int)
d["counter"] += 5
print(d.items()) # output: dict_items([('counter', 5)])
a = 1
print(locals().get("a")) # ouput:1

c = locals().get("c", 2) + 1 
print(c) # output 3