【发布时间】:2015-06-24 09:40:33
【问题描述】:
简而言之,问题是:有没有办法阻止 Python 查找当前范围之外的变量?
详情:
如果没有在当前范围内定义,Python 会在外部范围内查找变量定义。因此,如果在重构过程中不小心,这样的代码很容易被破坏:
def line(x, a, b):
return a + x * b
a, b = 1, 1
y1 = line(1, a, b)
y2 = line(1, 2, 3)
如果我重命名了函数参数,但忘记在函数体内重命名它们,代码仍然会运行:
def line(x, a0, b0):
return a + x * b # not an error
a, b = 1, 1
y1 = line(1, a, b) # correct result by coincidence
y2 = line(1, 2, 3) # wrong result
我知道it is bad practice to shadow names from 外部范围。但有时我们还是会这样做......
有没有办法阻止 Python 在当前范围之外查找变量? (因此在第二个示例中访问 a 或 b 会引发错误。)
【问题讨论】:
-
不,没有。否则任何内置的都不会工作。
-
更好的解决方案是使用适当的测试,而不是试图破坏Python。
-
把最后三行放到另一个函数中...
-
@kazemakase:尽量避免创建太多全局变量。例如,将您的其他代码放在
main()函数中。 -
@kazemakase:考虑到模块中的所有函数和类也是全局的,它不仅仅是您的代码将使用的内置函数。如果禁用全局变量,就不可能将任何内容分解为函数。