猿问

蟒蛇中的鲁阿风格

变量 a 不存在


我可以用Lua语言写:


a = (a or 0) + 1

现在 a = 1


这让我不必提前声明变量“a”。这是模拟


a = 0

a = a + 1

我怎样才能在蟒蛇中做同样的事情?


a = (a or 0) + 1

附言:为什么它很重要?要避免将零分配给变量:


蟒蛇(4 行代码):


for ticker in ticker_list:

    total_volume[ticker] = 0


for a in range (1,10):

    total_volume[ticker] = total_volume[ticker] + a

lua(2 行代码):


for a=1,9 do:

    total_volume[ticker] = (total_volume[ticker] or 0) + a


墨色风雨
浏览 78回答 2
2回答

四季花海

Python确实有一个三元运算符,如Lua和许多其他语言但与Lua不同的是,Python不会将未定义的变量作为“false”值处理,如果您尝试计算未定义的变量,它将引发错误。特别是在您的情况下,您将收到密钥不存在的密钥错误。ticker路亚三元:    total_volume[ticker] = (total_volume[ticker] or 0) + a蟒蛇等效物:    total_volume[ticker] = (total_volume[ticker] if ticker in total_volume else 0) + a如果 Lua 将把 if 之前的值传递给你,python 将把后面的语句在 的时候之前传递给你,而当它是 。ortruthyiftrueelsefalse为了安全地评估密钥是否在字典中,我们可以使用 。in这主要是为了演示您在Lua中使用的三元运算以及如何在Python中执行此操作,但这并不意味着它是解决此问题的正确工具。我建议一个更干净的解决方案:   total_volume[ticker] = total_volume.get(ticker, 0) + 1它更少的代码,更容易推理。 将返回,或者如果字典中不存在该键,它将返回默认值 。gettotal_volume[ticker]0

青春有我

对于您的用例,我建议使用:defaultdictfrom collections import defaultdictd = defaultdict(int)d["counter"] += 5print(d.items()) # output: dict_items([('counter', 5)])但是——我不认为这是一个好的做法,但你可以在所需的范围内使用或动态访问变量:locals()globals()a = 1print(locals().get("a")) # ouput:1c = locals().get("c", 2) + 1 print(c) # output 3
随时随地看视频慕课网APP

相关分类

Python
我要回答