我有一个模块;假设它的结构为:
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)
如果你真的坚持保持参数名称lower
和upper
(为什么不只是new_lower
,new_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)