Я использую 'глобальный' в контексте, таком как это:
_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
У меня никогда не было законного использования для оператора ни в каком производственном коде в моих 3 + годы профессионального использования Python и более чем пять лет как человек, увлеченный своим хобби, Python. Любое состояние, которое я должен изменить, находится в классах или, если существует некоторое "глобальное" состояние, оно находится в некоторой общей структуре как глобальный кэш.
По моему мнению, как только Вы чувствуете потребность использовать глобальные переменные в коде Python, это - прекрасное время, чтобы остановиться некоторое время и работать над рефакторингом Вашего кода.
Помещение global
в коде и задержке процесса рефакторинга могло бы звучать как обещание, если Ваш крайний срок близок, но, верьте мне, Вы не собираетесь возвращаться к этому и фиксировать, если Вы действительно не имеете к - как Ваш код, остановленный работать по некоторой нечетной причине, необходимо отладить его, Вы встречаетесь с некоторыми из тех global
переменные и все, что они делают, портят вещи.
Так, честно, даже это позволяется, я был бы так, как я могу избегать использования его. Даже если это означает простую сборку классов вокруг Вашей части кода.
Объекты являются предпочтенным способом наличия нелокального состояния, настолько глобальный редко необходим. Я не думаю, что предстоящий нелокальный модификатор будет широко используемым также, я думаю его главным образом там заставлять lispers прекратить жаловаться:-)
Я избегаю его, и мы даже имеем правило pylint, которое запрещает его в нашем производственном коде. Я на самом деле полагаю, что это не должно даже существовать вообще.
Редко. Я должен все же найти использование для него вообще.
Это может быть полезно в потоках для совместного использования состояния (с блокировкой механизмов вокруг этого).
Однако я крайне редко использую его.
Я использовал его в быстром & грязный, сценарии единственного использования для автоматизации некоторой одноразовой задачи. Что-либо большее, чем это, или это должно быть снова использовано, и я найду более изящный путь.
Несколько раз. Но это всегда была хорошая начальная точка для рефакторинга.
Если я могу избежать его, нет. И к моему знанию всегда существует способ избежать его. Но я не заявляю, что это полностью бесполезно любой