在if块中初始化变量的推荐方法

13 投票
7 回答
13116 浏览
提问于 2025-04-17 10:39

我有以下这段代码(省略了一些其他操作):

def foobar():
    msg=None
    if foo:
        msg='foo'
    else:
        msg='bar'
    return msg

那么下面这种写法对于 msg 变量来说是不是更好呢?

def foobar():
    if foo:
       msg='foo'
    else:
       msg='bar'
    return msg

我知道我可以把上面的函数简化成三元表达式,但每个 if-else 块里还有一些我没有提到的操作。

7 个回答

3

在Python中,在条件语句之前初始化变量并没有太大的好处,就像你第一个例子那样。你只需要确保在返回这个变量之前,它已经被初始化了。根据你的例子,这假设你在使用“单一出口点”的编程方式。在某些情况下,这种方式在Python中是合适的,但有时候如果能早一点退出,代码会更简洁。

def earlyReturn(mycheck):
  if not mycheck:
    return 'You forgot something.'

  # code here if the test passes without needing an extra level of indentation.
6

为了完整性,这里有一些可以替代if/else语句的一行代码:

msg = 'foo' if foo else 'bar'
msg = foo and 'foo' or 'bar'
msg = ('bar', 'foo')[bool(foo)]

其中第一个选项是最清晰的,如果你不喜欢这种一行代码的写法,我建议你可以使用第二种方法或者thagorn的回答。只有在最后一种情况下,如果foo不是布尔值(也就是不是0或1),才需要用到bool()这个函数。

显然,在你的示例函数中,你可以直接返回这个结果,而根本不需要使用msg这个变量:

def foobar():
    return 'foo' if foo else 'bar'
7

这两种方法都可以,但我可能会选择:

def foobar():
    msg='bar'
    if foo:
        msg='foo'
    return msg

撰写回答