Python:如果不存在则赋值

92 投票
10 回答
279309 浏览
提问于 2025-04-17 01:43

我是一名使用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"

也就是说,我努力避免出现一些代码路径定义了变量,而其他路径没有定义的情况。在我的代码中,永远不会有一种情况导致定义的变量集合产生混淆(实际上,我通常会更进一步,确保无论代码路径如何,类型都是相同的)。这可能只是个人喜好,但我发现这种模式虽然在写的时候不太明显,但在后续阅读时要容易理解得多。

撰写回答