Criando variáveis a partir de uma lista

Volta e meia preciso usar elementos de uma lista como nomes de variáveis e atribuir valores distintos para cada uma. O comando é bem simples:

1
globals()[item_lista]

Achar essa solução pela internet é que não é tão simples assim.

Antes de te mostrar a aplicação, lembro que há algumas convensões para nomear as variáveis em Python. Essas boas práticas existem para que o código seja mais explícito e facilmente legível por qualquer pessoa, até pela sua “eu do futuro”. Na PEP 8 - Style Guide fo Python Code você encontrará essa e várias outras convensões como: uso da identação e uso de aspas.

Caso de uso

Atribuir um número inteiro aleatório para cada elemento de umas lista de strings.

Solução

Para gerar os números, escolhi usar a biblioteca random; especificamente a função randint(), que retorna um número entre os parâmetros informados (13 e 76):

1
2
3
4
5
6
import random

lista = ["numero_casa", "idade", "tamanho_camisa", "total_gastos"]

for item in lista:
  globals()[item] = random.randint(13, 76)

Pronto! As variáveis foram criadas.

Para verificá-las use a função print():

1
2
3
4
5
6
print(
    numero_casa,
    idade,
    tamanho_camisa,
    total_gastos
)

Saiba mais

Em linhas gerais, python armazena todas as variáveis e símbolos do entorno/programa em um dicionário, sendo a “chave” o nome da variável e o “valor” o valor atribuído à variável. Então, a função globals() retorna esse dicionário apenas com as chaves do tipo “global” (pera, já te explico isso). Isso quer dizer que ao executar o comando globals()['nome_variável'], com o nome de qualquer que seja a variável global já existente no entorno, o resultado será o valor atribuído a ela:

1
2
3
altura = 1.64

print("A altura é de ", globals()['altura'])

Saída esperada:

1
A altura é de 1.64

Dessa forma, quando usamos o comando globals()['nome_variável'] podemos tanto criar uma nova (como já vimos no começo desse artigo), quanto modificar o valor de uma variável existente:

1
2
3
4
5
altura = 1.64

globals()['altura'] = 2.2

print("A altura é de ", globals()['altura'])

Saída esperada:

1
A altura é de 2.2

Te falei que a função globals() retorna apenas os símbolos do tipo “global”, não foi?! Isso porque, python tem dois tipos: global e local. Os símbolos do tipo “global” são os que foram criados de forma genérica no código, fora de estruturas dos tipos: função, classe, repetição (while e for), etc. Já os símbolos do tipo “local”, são os criados dentro dessas estruturas e que, consequentemente, só podem ser usados dentro delas.

Mais informações sobre o funcionamento da função embutida globals() estão disponíveis na documentação da linguagem.

Ana Cecília Vieira Analista de dados especializada em qualidade de dados. Entusiasta em dados abertos, código aberto e comunidades autogestinadas como instrumento para transformação social. Embaixadora do programa 'Ciência de Dados para Inovação Cívica' da Open Knowledge Brasil e podcaster no Pizza de Dados.

-----

Leia também: