Если функции необходимо изменить переменную, объявленную в глобальной области видимости, она должна использовать глобальную декларацию. Однако, если функции просто нужно прочитать глобальную переменную, она может сделать это без использования глобального объявления:
X = 10
def foo():
global X
X = 20 # Needs global declaration
def bar():
print( X ) # Does not need global
Мой вопрос о дизайне Python: почему Python предназначен для чтения глобальных переменных без использования глобальной декларации? То есть, почему только принудительное присвоение имеет глобальное значение, почему бы не заставить глобальные читать тоже? (Это сделает его ровным и элегантным.)
Примечание. Я вижу, что во время чтения нет двусмысленности, но при назначении не ясно, будет ли человек создавать новую локальную переменную или назначить глобальную. Но я надеюсь, что есть лучшая причина или намерение этого неравномерного выбора дизайна BDFL.