Вы используете “глобальный” оператор в Python? [закрытый]

63
задан Community 23 May 2017 в 11:47
поделиться

10 ответов

Я использую 'глобальный' в контексте, таком как это:

_cached_result = None
def myComputationallyExpensiveFunction():
    global _cached_result
    if _cached_result:
       return _cached_result

    # ... figure out result

    _cached_result = result
    return result

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

def myComputationallyExpensiveFunction():
    if myComputationallyExpensiveFunction.cache:
        return myComputationallyExpensiveFunction.cache

    # ... figure out result

    myComputationallyExpensiveFunction.cache = result
    return result
myComputationallyExpensiveFunction.cache = None
56
ответ дан Jerub 24 November 2019 в 16:23
поделиться

У меня никогда не было законного использования для оператора ни в каком производственном коде в моих 3 + годы профессионального использования Python и более чем пять лет как человек, увлеченный своим хобби, Python. Любое состояние, которое я должен изменить, находится в классах или, если существует некоторое "глобальное" состояние, оно находится в некоторой общей структуре как глобальный кэш.

15
ответ дан ironfroggy 24 November 2019 в 16:23
поделиться

По моему мнению, как только Вы чувствуете потребность использовать глобальные переменные в коде Python, это - прекрасное время, чтобы остановиться некоторое время и работать над рефакторингом Вашего кода.
Помещение global в коде и задержке процесса рефакторинга могло бы звучать как обещание, если Ваш крайний срок близок, но, верьте мне, Вы не собираетесь возвращаться к этому и фиксировать, если Вы действительно не имеете к - как Ваш код, остановленный работать по некоторой нечетной причине, необходимо отладить его, Вы встречаетесь с некоторыми из тех global переменные и все, что они делают, портят вещи.

Так, честно, даже это позволяется, я был бы так, как я могу избегать использования его. Даже если это означает простую сборку классов вокруг Вашей части кода.

8
ответ дан kender 24 November 2019 в 16:23
поделиться

Объекты являются предпочтенным способом наличия нелокального состояния, настолько глобальный редко необходим. Я не думаю, что предстоящий нелокальный модификатор будет широко используемым также, я думаю его главным образом там заставлять lispers прекратить жаловаться:-)

3
ответ дан JacquesB 24 November 2019 в 16:23
поделиться

Я избегаю его, и мы даже имеем правило pylint, которое запрещает его в нашем производственном коде. Я на самом деле полагаю, что это не должно даже существовать вообще.

2
ответ дан André 24 November 2019 в 16:23
поделиться

Редко. Я должен все же найти использование для него вообще.

2
ответ дан hydrapheetz 24 November 2019 в 16:23
поделиться

Это может быть полезно в потоках для совместного использования состояния (с блокировкой механизмов вокруг этого).

Однако я крайне редко использую его.

2
ответ дан Corey Goldberg 24 November 2019 в 16:23
поделиться

Я использовал его в быстром & грязный, сценарии единственного использования для автоматизации некоторой одноразовой задачи. Что-либо большее, чем это, или это должно быть снова использовано, и я найду более изящный путь.

2
ответ дан Kena 24 November 2019 в 16:23
поделиться

Несколько раз. Но это всегда была хорошая начальная точка для рефакторинга.

1
ответ дан zgoda 24 November 2019 в 16:23
поделиться

Если я могу избежать его, нет. И к моему знанию всегда существует способ избежать его. Но я не заявляю, что это полностью бесполезно любой

0
ответ дан 24 November 2019 в 16:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: