Python:如果不存在则赋值
我是一名使用Ruby on Rails的程序员,刚开始接触Python。我想找一种语法,可以让我在一个变量之前没有被赋值的情况下,给它设置一个特定的值。简单来说,我想要的是:
# only if var1 has not been previously assigned
var1 = 4
10 个回答
61
var1 = var1 or 4
这个代码可能会有一个问题,就是如果变量 var1 的值是“假”的,比如说 False(假)、0(零)或者空列表 [],那么它会选择 4 作为结果。这可能会导致一些问题。
174
你应该把变量初始化为 None
,然后再去检查它:
var1 = None
if var1 is None:
var1 = 4
这可以用一行代码来写:
var1 = 4 if var1 is None else var1
或者用简写方式(不过建议还是检查一下是否为 None
)
var1 = var1 or 4
另外,如果你没有给变量赋值,那么这个变量名就不存在,之后使用它会引发 NameError
错误,你也可以利用这个知识做一些这样的事情:
try:
var1
except NameError:
var1 = 4
但我不太建议这样做。
38
这是一种非常不同的编程风格,但我总是尽量把看起来像
bar = None
if foo():
bar = "Baz"
if bar is None:
bar = "Quux"
的东西简化成:
if foo():
bar = "Baz"
else:
bar = "Quux"
也就是说,我努力避免出现一些代码路径定义了变量,而其他路径没有定义的情况。在我的代码中,永远不会有一种情况导致定义的变量集合产生混淆(实际上,我通常会更进一步,确保无论代码路径如何,类型都是相同的)。这可能只是个人喜好,但我发现这种模式虽然在写的时候不太明显,但在后续阅读时要容易理解得多。