Python para Desenvolvedores

2ª edição, revisada e ampliada

Capítulo 9: Escopo de nomes


O escopo de nomes em Python é mantido através de Namespaces, que são dicionários que relacionam os nomes dos objetos (referências) e os objetos em si.

Normalmente, os nomes estão definidos em dois dicionários, que podem ser consultados através das funções locals() e globals(). Estes dicionários são atualizados dinamicamente em tempo de execução.

Namespaces

Variáveis globais podem ser ofuscadas por variáveis locais (pois o escopo local é consultado antes do escopo global). Para evitar isso, é preciso declarar a variável como global no escopo local.

Exemplo:

In [1]:
def somalista(lista):
    """
    Soma listas de listas, recursivamente
    Coloca o resultado como global
    """
    global soma
    
    for item in lista:
        if type(item) is list: # Se o tipo do item for lista
            somalista(item)
        else:
            soma += item

soma = 0
somalista([[1, 2], [3, 4, 5], 6])

print soma # 21
21

Usar variáveis globais não é considerada uma boa prática de desenvolvimento, pois tornam mais difícil entender o sistema, portanto é melhor evitar seu uso. E ofuscar variáveis também.

In [1]:
 
Out[1]: