将函数局部参数分配给具有相同名称的全局变量



我有一个模块;假设它的结构为:

algorithms
├─ __init__.py
└─ algorithm.py

在我的算法模块中,我有一些全局变量,我想创建一个方便的初始值设定项来设置它们。我想对初始值设定项的参数使用与变量相同的名称,但这会导致本地和全局名称的冲突。我能想到的最干净的实现方法是:

lower = None
upper = None
def init_range(lower, upper):
_lower = lower
global lower
lower = _lower
_upper = upper
global upper
upper = _upper

如果这是一堂课,(我想(我可以做一些像self.lower = lower.有没有一种不那么冗长的方式来做我正在为模块全局变量做的事情?像algorithm.lower = lower

编辑:事实证明我的解决方案不起作用。

您可以使用globals函数获取表示全局范围的字典,并对其进行update

def init_range(lower, upper):
globals().update(lower=lower, upper=upper)

如果你真的坚持保持参数名称lowerupper(为什么不只是new_lowernew_upper或类似的东西?(,那么你可以将任务委托给具有替代变量名称的内部函数。

def init_range(lower, upper):
def _init_range(_lower, _upper):
global lower
global upper
lower = _lower
upper = _upper
_init_range(lower, upper)

演示:

>>> lower is None, upper is None
(True, True)
>>> init_range(lower=1, upper=2)
>>> lower, upper
(1, 2)

最新更新