由于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_message和get_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().
| 归档时间: |
|
| 查看次数: |
6134 次 |
| 最近记录: |