Как получилось, что я должен вызвать «глобальный», чтобы установить глобальную переменную в функции Python

#python #python-3.x #variables

#питон #python-3.x #переменные

Вопрос:

 def try_again():  play_again = input("would you like to play again? ").lower()  if play_again == "y":  global comp_count  comp_count = 0  global user_count  user_count = 0  game()  else:  print(" Thanks for playing! Bye now! :) ")  exit()   

Это в Python 3. Я хотел бы сбросить глобальную переменную в функции. Почему я должен так это называть? Есть ли лучший СУХОЙ способ?

Комментарии:

1. Потому что именно так это должно / определено для работы. Лучший и более чистый способ-это не иметь глобальных переменных.

2. @luk2302 Я думаю, вы не согласны с try_again тем, что вас определяют. Это глобальная переменная.

3. Потому что вы не должны использовать глобальные переменные. Конечно, для global этого также есть технические причины, но я их не знаю или мне все равно, я не использую глобальные переменные, и вам тоже не следует. Глобальное государство укусит вас только в какой-то момент.

4. Если user_count=0 по умолчанию назначены глобальные переменные, то для назначения переменных, локальных для функции, вам потребуется обратное thisfunction inner_count . Никто этого не хочет, потому что локальные переменные встречаются гораздо чаще, чем глобальные. Что касается global user_count=0 , это кажется правдоподобным, но это еще более запутанно, потому что, похоже, это позволяет user_count=2 сосуществовать местным жителям. Итак, какой из них вы используете, если видите что-то подобное print(user_count) ? global user_count заявляет, что название определенно глобальное для ясности.

5. И другие комментаторы правы. Вы хотите, чтобы функции не зависели от глобальных переменных, чтобы они могли вести себя надежно с учетом входных аргументов. Если вы хотите обновить глобальный user_count , вместо try_again() того, чтобы делать что-то вроде comp_count, user_count = try_again(comp_count, user_count)

Ответ №1:

Когда переменная создается вне функции, по умолчанию для нее устанавливается значение global, но если вы создаете переменную внутри функции и хотите, чтобы к ней обращались и изменяли другие функции, вы устанавливаете для нее значение global.