什么是条件变量初始化的pythonic方式?

Rob*_*t P 13 python

由于Python的作用域规则,之后在范围内初始化的所有变量都可用.由于条件不引入新范围,因此不一定需要其他语言的构造(例如在该条件之前初始化变量).例如,我们可能有:

def foo(optionalvar = None):
    # some processing, resulting in...
    message = get_message()
    if optionalvar is not None:
        # some other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message
Run Code Online (Sandbox Code Playgroud)

或者,我们可以改为:

def foo(optionalvar = None):
    if optionalvar is None:
        # processing, resulting in...
        message = get_message()
    else:
        # other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message
Run Code Online (Sandbox Code Playgroud)

当然,get_messageget_other_message函数可能是多行代码并且基本上是无关的(你可以假设每个路径之后程序的状态是相同的); 这里的目标是message在功能的这一部分之外准备好使用.

我已经看到后一种结构在其他问题中多次使用,例如:

哪种结构更容易接受?

Mik*_*maa 13

Python也有一个非常有用的if语法模式,你可以在这里使用

  message = get_other_message() if optional_var else get_message()
Run Code Online (Sandbox Code Playgroud)

或者,如果您想严格比较无

  message = get_other_message() if optional_var is not None else get_message()
Run Code Online (Sandbox Code Playgroud)

与示例1)不同,您发布的不会不必要地调用get_message().