将function-local参数分配给具有相同名称的全局变量

时间:2018-06-02 08:43:44

标签: python python-2.7

我有一个模块;说它的结构如下:

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

这样的东西

编辑:原来我的解决方案不起作用。

2 个答案:

答案 0 :(得分:2)

如果你真的坚持保留参数名称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)

答案 1 :(得分:2)

您可以使用globals函数获取代表全局范围的字典,并使用update

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