Pergunta

Sou relativamente novo em Python e codificação.Estou bem até encontrar "Nenhum":

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

Embora pareça simples, não consigo entender por que o loop acima começa.Como é None diferente de uma string vazia?Achei que ambos foram avaliados como Falso.

Foi útil?

Solução

Ambos avaliam para False Mas isso não significa que eles sejam a mesma coisa.

None é um valor separado e tem seu próprio tipo. Uma string vazia é uma string sem conteúdo:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

Outras dicas

Não, None é apenas a mesma coisa que None em si. Strings vazios não são a mesma coisa:

>>> None == ""
False

None é um valor especial de singleton (existe apenas uma cópia em uma sessão de Python) significa 'vazio' ou a falta de um valor 'adequado'. Como tal, é um bandeira ou sinal valor; O Python o usa por convenção para sinalizar que um processo não retornou nada, por exemplo.

Ambos None e a sequência vazia é considerada falsa em um contexto booleano:

>>> bool(None)
False
>>> bool("")
False

como todos os recipientes vazios (como uma tupla, listar ou definir vazios) e numérico 0 (seja inteiro, ponto flutuante ou um número complexo). Ser considerado falso não os torna iguais, no entanto.

Se você quisesse testar algum valor que é falso, use:

while not variable:

Como not Interpreta o operando em um contexto booleano e retorna o valor inverso:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

Ambos são avaliados como Falso, mas são diferentes quando usados ​​em uma comparação

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top