在 if 语句中声明变量,Python 反模式?
Declaring a variable in an if statement, a Python anti pattern?
我们在工作中讨论了以下 Python 代码(可能是反模式):
if conditional_variable_:
a = "Some value"
print a
假设 conditional_variable
已定义,但 a
变量未定义。
问题是关于在不声明变量的情况下使用变量。变量 a
是在一段代码中创建的,该代码可能永远不会执行,但会被使用。
也许该修复可以修复反模式:
a = "default value"
if conditional_variable:
a = "changed_value"
print a
在这种情况下,a
变量在使用前已定义。将 print a
视为 a
变量的用法。
它不是 anti-pattern。这是一个 bug.
Python没有'declarations',只有binding operations;名称要么绑定,要么不绑定。尝试访问尚未绑定的名称会导致异常。
除非您的代码专门处理异常并且预期它,运行 进入 NameError
或 UnboundLocalError
异常应被视为错误.
换句话说,尝试引用名称的代码应始终遵守绑定名称的相同条件,或准备好处理将要发生的异常如果这些条件并不总是成立,则提出。在 if
语句之外给你的变量一个默认值意味着它在 所有 情况下都是绑定的,所以你也可以总是引用它。
我们在工作中讨论了以下 Python 代码(可能是反模式):
if conditional_variable_:
a = "Some value"
print a
假设 conditional_variable
已定义,但 a
变量未定义。
问题是关于在不声明变量的情况下使用变量。变量 a
是在一段代码中创建的,该代码可能永远不会执行,但会被使用。
也许该修复可以修复反模式:
a = "default value"
if conditional_variable:
a = "changed_value"
print a
在这种情况下,a
变量在使用前已定义。将 print a
视为 a
变量的用法。
它不是 anti-pattern。这是一个 bug.
Python没有'declarations',只有binding operations;名称要么绑定,要么不绑定。尝试访问尚未绑定的名称会导致异常。
除非您的代码专门处理异常并且预期它,运行 进入 NameError
或 UnboundLocalError
异常应被视为错误.
换句话说,尝试引用名称的代码应始终遵守绑定名称的相同条件,或准备好处理将要发生的异常如果这些条件并不总是成立,则提出。在 if
语句之外给你的变量一个默认值意味着它在 所有 情况下都是绑定的,所以你也可以总是引用它。