It’s knowledge, baby

Welcome to the jungle!

Como verificar uma variável None em Python?

Opa Pessoal,

Agora que acabou minha corrida pra submeter para o mestrado, ando desenvolvendo projetos antigos como brincar com Python pra S60 e aprender a programar para Android (esse segundo ainda está em stand by).

Durante minhas brincadeiras com Python, percebi que não tinha matérial explicando de forma clara como verificar uma variável none em Python (lembrando que em Python, não existe variável null e sim None). Então, apesar de este blog não ter essa função, vou colocar aqui a solução que encontrei através da ajuda de alguns membros do Grupy-AL.

O programa que estou desenvolvendo requisita alguns dados a um banco de dados interno do celular e algum desses dados podem vir None ou não.

Solução

Em Python existe duas funções build-in que são:

locals()
Retorna um dicionário com as variáveis locais. Cuidado: O conteúdo deste dicionário não pode ser modificado; mudanças não podem afetar os valores das variaveis locais pelo interpretador.
globals()
Retorna um dicionário representando as variáveis globais. Este é sempre o dicionário do módulo corrente (ou seja, serve apenas para o modulo no qual foi definido e não nos que podem ser chamados)

Para resolver a verificação, basta fazer:

if var in locals().keys():

[Tratamento caso ela exista dentro das váriavies locais]

else:

[Tratamento caso ela NÃO exista dentro das váriaveis locais]

if var in globals().keys():

[Tratamento caso ela exista dentro das váriavies globais]

else:

[Tratamento caso ela NÃO exista dentro das váriaveis globais]

A função keys() é outra função build-in que retorna os valores do objeto que for chamado.

Agradeço ao pessoal do Grupy-AL e fico a disposição para qualquer dúvida.

Um abraço a todos

outubro 30, 2009 - Posted by | Colaboração, Computação | , , , , ,

4 Comentários »

  1. Fala Marco, bacana você tratar disso, mas tenho um comentário.

    Acho que essa solução é muito custosa, pois a função keys, cria uma cópia da lista de chaves do dicionário. Além disso, a busca na lista é O(2*log(n)) no caso médio (usando quick e/ou merge sort para ordenar e depois aplicando busca binária). Creio que não existe necessidade pra isso, uma vez que ao utilizar um dicionário você pode fazer if var in globals(), o que eu espero que tenha custo O(1), uma vez que estamos tratando de uma tabela hash. Além disso você elinima o custo com a criação da cópia (O(n)) toda vez que precisa fazer a busca.

    Resumindo, caimos de O(2*n*log(n)) pra O(1) e ainda temos menos código😀

    Abraços,
    Fireman

    Comentário por Daniel Fireman | outubro 31, 2009

  2. Ia esquecendo de lembrar que para o caso de classes temos o método __hasattr__

    Abraços,
    Fireman

    Comentário por Daniel Fireman | outubro 31, 2009

  3. Sinto uma falta violenta de um dicionário built-in em Java. Cansei desses Maps from hell.

    Sempre quis aprender Python, tô tendo a oportunidade agora e acho que vou cair pra dentro. Depois eu quero saber uns livros decentes.

    Eu achei a solução meio esquisita pq procurar pelas variáveis locais/globais usando dicionário numa coisa que me lembra reflexão n me pareceu mto bom. Mas como não sei nada de Python, paro por aqui.

    PS: Escute seu amigo aí, em celular tem q espremer bit vei senão as coisas ficam lentas😛

    Comentário por Ícaro | novembro 4, 2009

  4. Sim palhaço, comece a ler meus posts de impressões sobre a Europa, tu vai curtir as resenhas asdsdhususa

    Comentário por Ícaro | novembro 4, 2009


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: