O que eu entendo ao ler a documentação é que o Python tem um espaço para nome separado para funções e, se eu quiser usar uma variável global nessa função, preciso usá-lo global
.
Estou usando o Python 2.7 e tentei este pequeno teste
>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
... return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'
Parece que as coisas estão funcionando bem, mesmo sem global
. Consegui acessar a variável global sem nenhum problema.
Estou faltando alguma coisa? Além disso, a seguir é da documentação do Python:
Os nomes listados em uma instrução global não devem ser definidos como parâmetros formais ou em um destino de controle de loop for, definição de classe, definição de função ou instrução de importação.
Embora os parâmetros formais e a definição de classe façam sentido para mim, não consigo entender a restrição de destino de controle de loop e definição de função.
def foo(): ...
e foo = ...
ao mesmo tempo). Ele cria um novo escopo para cada chamada de função. (Mas como isso é diferente de todos os outros linguagem remotamente de alto nível no mundo?)