我有一个模块;说它的结构如下:
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
?
编辑:原来我的解决方案不起作用。
答案 0 :(得分:2)
如果你真的坚持保留参数名称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)
答案 1 :(得分:2)