Назначить локальный параметр функции глобальной переменной с тем же именем - PullRequest
0 голосов
/ 02 июня 2018

у меня есть модуль;скажем, это структурировано как:

algorithms
 ├─ __init__.py
 └─ algorithm.py

Внутри моего модуля алгоритма у меня есть несколько глобальных переменных, и я хотел бы создать вспомогательный инициализатор, который их настраивает.Я хотел бы использовать те же имена для параметров инициализатора, что и для vars, но это приводит к конфликту локальных и глобальных имен.Самый простой способ реализовать это:

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 голосов
/ 02 июня 2018

Вы можете использовать функцию globals, чтобы получить словарь, представляющий глобальную область, и update it:

def init_range(lower, upper):
   globals().update(lower=lower, upper=upper)
0 голосов
/ 02 июня 2018

Если вы действительно настаиваете на сохранении имен параметров 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...