在Python中,在函数之外创建的变量称为全局变量。但是,要在函数(局部变量)中创建全局变量,可以使用全局关键字。
我的问题是,在什么情况下,全局变量应该在函数的内部或外部?
发布于 2019-11-22 16:01:13
想一想缓存一个先决条件,这可能是昂贵的计算,但经常检查,例如,在每个函数调用。然后将前提条件的布尔值存储一次,然后在函数中使用它。但我想有更优雅的模式来避免这样的伎俩。我会认为这是一次又快又脏的攻击。还可以有一个函数全局变量,如下所示:
def f():
if f.precondition is None:
f.precondition = test_precondition()
if f.precondition:
# ...
else:
#...
# set the initial state
f.precondition = None这样,您就避免使用全局变量,但将作用域缩小为某种程度上的静态函数。该值也可以跨函数共享。
发布于 2019-11-22 16:23:28
我总是建议在函数作用域之外声明全局(模块级)变量。如果您在本地声明它,则需要确保该方法在另一个方法中访问它之前已经执行。虽然这是可以做到的,但在进行更改时,这是一个小陷阱。通过在模块级别声明它,它对预期的使用设置了一个明确的期望。
不过,你可能错过了一件事。即使在模块作用域中声明变量,也需要在本地作用域中拥有全局声明,以便为其赋值。否则,分配将在本地作用域中创建一个新名称,该名称隐藏全局名称。我个人认为Python的这个特性是它最糟糕的缺点之一。如果在模块中经常使用全局范围,则应该考虑使用类进行重构。
https://softwareengineering.stackexchange.com/questions/401109
复制相似问题