Um dicionário pode ser convertido automaticamente para booleano, que avalia False
para dicionário vazio e True
para dicionário não vazio.
if myDictionary: non_empty_clause()
else: empty_clause()
Se isso parecer muito idiomático, você também pode testar len(myDictionary)
para zero, ou set(myDictionary.keys())
para um conjunto vazio, ou simplesmente para testar a igualdade com {}
.
A função isEmpty não é apenas desnecessária, mas também sua implementação tem vários problemas que eu posso identificar prima-facie.
- A
return False
declaração é recuada um nível muito profundo. Ele deve estar fora do loop for e no mesmo nível da for
instrução. Como resultado, seu código processará apenas uma chave selecionada arbitrariamente, se houver uma chave. Se uma chave não existir, a função retornará None
, que será convertida em booleano False. Ai! Todos os dicionários vazios serão classificados como falso-nagativos.
- Se o dicionário não estiver vazio, o código processará apenas uma chave e retornará seu valor convertido para booleano. Você não pode nem assumir que a mesma chave é avaliada toda vez que você a chama. Portanto, haverá falsos positivos.
- Digamos que você corrija o recuo da
return False
declaração e a traga para fora do for
loop. Então, o que você obtém é o OR booleano de todas as chaves ou False
se o dicionário está vazio. Ainda assim, você terá falsos positivos e falsos negativos. Faça a correção e teste no dicionário a seguir para obter uma evidência.
myDictionary={0:'zero', '':'Empty string', None:'None value', False:'Boolean False value', ():'Empty tuple'}
self.users
não está vazio, basta fazerif self.users
.