Skip to content

Criação de Variáveis em Python sob a óptica de um Especialista

    Criação Variáveis

    Uma das primeiras coisas que aprendemos em Python é como criar uma variável e atribuir a ela um valor usando o operador de atribuição =.

    x = 5
    y = 3.14159
    z = 'maçã'
    

    Nesse caso, estamos criando uma variável x e atribuindo o valor 5, criando uma variável y e atribuindo o valor 3.14159, e criando uma variável z e atribuindo o valor ‘maçã’.

    Mas você sabia que podemos fazer isso sem usar 1) o operador de atribuição = ou 2) criar a própria variável? Vamos explorar como fazer isso.

    Aqui está Como

    globals().__setitem__('x', 5)
    globals().__setitem__('y', 3.14159)
    globals().__setitem__('z', 'maçã')
    
    print(x)  # 5
    print(y)  # 3.14159
    print(z)  # maçã
    

    O que? Isso mesmo!

    Entendendo o globals()

    Primeiro, vamos começar com o globals().

    x = 5
    print(globals())
    
    # {'__name__': '__main__', ..., 'x': 5}
    x = 5
    y = 6
    print(globals())
    
    # {'__name__': '__main__', ..., 'x': 5, 'y': 6}
    

    globals() retorna um dicionário que contém todas as variáveis globais – seus nomes de variáveis como chaves e valores como valores. Ele também contém coisas padrão como __name__ e outros.

    E mais importante, ele contém as variáveis que criamos!

    Usando globals()

    Agora, o que fazemos com globals()[‘x’] = 5 é o mesmo que fazer x = 5.

    E o que é esse negócio de __setitem__?

    Bem, d[‘x’] = 5 é o mesmo que d.__setitem__(‘x’, 5).

    Portanto, x = 5 é o mesmo que globals().__setitem__(‘x’, 5).

    E é assim que podemos criar uma variável em Python sem realmente criar uma variável!

    globals().__setitem__('x', 5)          # x = 5
    globals().__setitem__('y', 3.14159)    # y = 3.14159
    globals().__setitem__('z', 'maçã')    # z = maçã
    
    print(x)  # 5
    print(y)  # 3.14159
    print(z)  # maçã

    Mais Referências

    Tutoriais de Estruturas de Dados em Python

    Tags:

    Leave a Reply

    Your email address will not be published. Required fields are marked *