建议在if块中初始化变量的方法

Mar*_*llo 6 python

我有以下代码(减去一些其他操作):

def foobar():
    msg=None
    if foo:
        msg='foo'
    else:
        msg='bar'
    return msg
Run Code Online (Sandbox Code Playgroud)

以下是msg变量的更好实践吗?

def foobar():
    if foo:
       msg='foo'
    else:
       msg='bar'
    return msg
Run Code Online (Sandbox Code Playgroud)

我知道我可以将上述函数简化为三元表达式,但是每个if-else块中都有一些操作我已经遗漏了.

tha*_*orn 6

要么应该没事,但我可能会做:

def foobar():
    msg='bar'
    if foo:
        msg='foo'
    return msg
Run Code Online (Sandbox Code Playgroud)

  • 对代码的性能影响非常小,它为“if foo”情况分配了两次“msg”。在正常实践中,使用应该不会有任何问题,但构建任何对性能至关重要的解决方案可能不是最好的。 (4认同)

And*_*ark 6

为了完整起见,这里有一些 if/else 块的单行替代方案:

msg = 'foo' if foo else 'bar'
msg = foo and 'foo' or 'bar'
msg = ('bar', 'foo')[bool(foo)]
Run Code Online (Sandbox Code Playgroud)

其中第一个绝对是最清楚的,如果您不喜欢单线,我建议您使用第二种方法或 thagorn 的答案。该bool()如果呼叫仅在最后一个必要的foo还不是布尔(或0/1)。

显然,在您的示例函数中,您甚至可以在不使用msg变量的情况下立即返回它:

def foobar():
    return 'foo' if foo else 'bar'
Run Code Online (Sandbox Code Playgroud)