Python: Почему глобальный нужен только для присваивания, а не для чтения?

Если функции необходимо изменить переменную, объявленную в глобальной области видимости, ей необходимо использовать глобальное объявление. Однако, если функции просто нужно прочитать глобальную переменную, она может сделать это без использования глобального объявления:

<code>X = 10
def foo():
    global X
    X = 20 # Needs global declaration
def bar():
    print( X ) # Does not need global
</code>

Мой вопрос касается дизайна Python: почему Python предназначен для чтения глобальных переменных без использования глобального объявления? То есть, почему только принудительное присвоение должно иметь глобальное значение, почему не принудительное глобальное при чтении тоже? (Это сделало бы это даже и изящным.)

Примечание: я вижу, что во время чтения нет никакой двусмысленности, но при назначении не ясно, намеревается ли создать новую локальную переменную или присвоить глобальной. Но я надеюсь, что у BDFL есть более веская причина или намерение для такого неравномерного выбора дизайна.

Ответы на вопрос(4)

Ваш ответ на вопрос