Python 在if块中初始化变量的推荐方法
我有以下代码(减去一些其他操作): 对于Python 在if块中初始化变量的推荐方法,python,Python,我有以下代码(减去一些其他操作): 对于msg变量,以下做法是否更好 def foobar(): if foo: msg='foo' else: msg='bar' return msg 我知道我可以将上面的函数简化为三元表达式,但是在我遗漏的每个if-else块中都有操作。如果您所展示的是msg所涉及的全部内容,那么初始化它对您没有任何帮助,第二种解决方案更好。在Python中,像第一个示例中那样在条件之前初始化没有什么好处。您只需要确保变
msg
变量,以下做法是否更好
def foobar():
if foo:
msg='foo'
else:
msg='bar'
return msg
我知道我可以将上面的函数简化为三元表达式,但是在我遗漏的每个if-else块中都有操作。如果您所展示的是msg所涉及的全部内容,那么初始化它对您没有任何帮助,第二种解决方案更好。在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.
我肯定会说越晚越好。Python不建议初始化变量。因此,如果它没有向代码添加一些有价值的东西,比如回退值,或者使代码更易于阅读,那么就应该避免这种情况,而在这种情况下,它不会这样做
编辑:我所说的回退值与thagorn和mikebabcock所建议的相同。如果这就是全部逻辑,为什么不:
def foobar():
msg='bar'
if foo:
msg='foo'
return msg
两者都可以,但我可能会:
def foobar():
msg='bar'
if foo:
msg='foo'
return msg
我意识到有些东西被遗漏了,但是如果你实际上不需要操作msg,我想你可以直接返回想要的内容,而不需要变量<代码>返回“foo”为了完整起见,这里有一些if/else块的单行替代方法:
msg = 'foo' if foo else 'bar'
msg = foo and 'foo' or 'bar'
msg = ('bar', 'foo')[bool(foo)]
第一条肯定是最清楚的,如果你不喜欢这一行,我建议你使用第二种方法或塔冈的答案。只有在foo
不是bool(或0/1)时,才需要在最后一个调用中调用bool()
显然,在您的示例函数中,您可以直接返回此值,而无需使用msg
变量:
def foobar():
return 'foo' if foo else 'bar'
总体而言,这是一个很好且全面的建议,但他们指出,条件块中的处理比这多。对代码的性能影响很小,如果foo
case,则为赋值两次msg
。在正常实践中,使用不应该是任何问题,但是构建任何性能关键的东西—此解决方案可能不是最好的。
def foobar():
return 'foo' if foo else 'bar'