Python: ¿Por qué se necesita global solo en la asignación y no en las lecturas?

Si una función necesita modificar una variable declarada en el alcance global, necesita usar la declaración global. Sin embargo, si la función solo necesita leer una variable global, puede hacerlo sin usar una declaración global:

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

Mi pregunta es sobre el diseño de Python: ¿por qué Python está diseñado para permitir la lectura de variables globales sin usar la declaración global? Es decir, ¿por qué solo forzar la asignación para tener global, por qué no forzar global en las lecturas también? (Eso lo haría uniforme y elegante.)

Nota: Puedo ver que no hay ambigüedad durante la lectura, pero al asignar no está claro si uno tiene la intención de crear una nueva variable local o asignarla a la global. Pero, espero que haya una mejor razón o intención para esta elección de diseño desigual por parte del BDFL.

Respuestas a la pregunta(4)

Su respuesta a la pregunta