Python: Por que o global é necessário apenas na atribuição e não nas leituras?
Se uma função precisar modificar uma variável declarada no escopo global, ela precisará usar a declaração global. No entanto, se a função só precisar ler uma variável global, ela poderá fazer isso sem usar uma declaração global:
<code>X = 10 def foo(): global X X = 20 # Needs global declaration def bar(): print( X ) # Does not need global </code>
Minha pergunta é sobre o design do Python: por que o Python é projetado para permitir a leitura de variáveis globais sem usar a declaração global? Isto é, porque somente a atribuição de força é global, por que não forçar globalmente em leitura também? (Isso tornaria ainda mais e elegante.)
Nota: Eu posso ver que não há ambiguidade durante a leitura, mas enquanto atribuí-lo não está claro se alguém pretende criar uma nova variável local ou atribuir a uma variável global. Mas, espero que haja uma razão ou intenção melhor para essa escolha de design desigual pelo BDFL.