pylint: глобальная переменная не назначена - PullRequest
2 голосов
/ 28 февраля 2020

Код:

assets = {}                # line 1

def myfunc():
    global assets          # line 4

    if assets.get("a", None) is None:
        assets["a"] = 2

Результат Pylint:

C:  1, 0: Invalid constant name "assets" (invalid-name)
C:  4, 4: Invalid constant name "assets" (invalid-name)
W:  4, 4: Using global for 'assets' but \
    no assignment is done (global-variable-not-assigned)

Функция будет вызываться несколько раз позже, поэтому я просто хочу назначить (в реальной жизни какое-то время потребляющий процесс) значение только один раз.

Как правильно это сделать?

ps: Спасибо @deceze, меня смутил тот факт, что если вместо assets = {} я использую assets = {"a":2}, то поведение будет совершенно другим.

1 Ответ

4 голосов
/ 28 февраля 2020

Линтер сообщает, что вы не назначаете assets, что означает assets = .... Что означает, что вам не нужно global assets. Переменная assets из внешней области видимости будет доступна внутри myfunc в любом случае для чтения . Вам нужно только global, если вы хотите присвоить другое значение переменной во внешней области видимости. assets['a'] = 2 не присваивает ему другое значение, оно просто изменяет существующее значение.

Итак, удалите строку global assets.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...