Ich versuche zu prüfen, ob ein Wörterbuch leer ist, sich aber nicht richtig verhält. Es überspringt es einfach und zeigtONLINEohne etwas anderes als die Anzeige der Nachricht. Irgendwelche Ideen warum?
def isEmpty(self, dictionary):
for element in dictionary:
if element:
return True
return False
def onMessage(self, socket, message):
if self.isEmpty(self.users) == False:
socket.send("Nobody is online, please use REGISTER command" \
" in order to register into the server")
else:
socket.send("ONLINE " + ' ' .join(self.users.keys()))
Leere Wörterbücher werten Sie False
in Python aus:
>>> dct = {}
>>> bool(dct)
False
>>> not dct
True
>>>
Ihre isEmpty
-Funktion ist daher nicht erforderlich. Alles was Sie tun müssen, ist:
def onMessage(self, socket, message):
if not self.users:
socket.send("Nobody is online, please use REGISTER command" \
" in order to register into the server")
else:
socket.send("ONLINE " + ' ' .join(self.users.keys()))
Es gibt drei Möglichkeiten, um zu überprüfen, ob Diktat leer ist. Ich bevorzuge jedoch nur den ersten Weg. Die anderen beiden Wege sind viel zu wortreich.
test_dict = {}
if not test_dict:
print "Dict is Empty"
if not bool(test_dict):
print "Dict is Empty"
if len(test_dict) == 0:
print "Dict is Empty"
dict = {}
print(len(dict.keys()))
wenn length gleich Null ist, bedeutet das, dass dict leer ist
Ein Wörterbuch kann automatisch in einen Booleschen Wert umgewandelt werden, der für ein leeres Wörterbuch False
und für ein nicht leeres Wörterbuch True
ergibt.
if myDictionary: non_empty_clause()
else: empty_clause()
Wenn dies zu idiomatisch erscheint, können Sie auch len(myDictionary)
für Null oder set(myDictionary.keys())
für eine leere Menge oder einfach mit {}
Auf Gleichheit prüfen.
Die Funktion isEmpty ist nicht nur unnötig, sondern Ihre Implementierung weist auch mehrere Probleme auf, die ich auf den ersten Blick erkennen kann.
return False
Ist eine Ebene zu tief eingerückt. Es sollte sich außerhalb der for-Schleife befinden und auf derselben Ebene wie die for
-Anweisung. Infolgedessen verarbeitet Ihr Code nur einen willkürlich ausgewählten Schlüssel, wenn ein Schlüssel vorhanden ist. Wenn kein Schlüssel vorhanden ist, gibt die Funktion None
zurück, was in boolean False umgewandelt wird. Autsch! Alle leeren Wörterbücher werden als falsch-nagativ klassifiziert.return False
Und bringen ihn aus der for
-Schleife heraus. Dann erhalten Sie den Booleschen Wert ODER aller Schlüssel oder False
, wenn das Wörterbuch leer ist. Trotzdem wirst du falsche Positive und falsche Negative haben. Führen Sie die Korrektur durch und prüfen Sie anhand des folgenden Wörterbuchs, ob Beweise vorliegen.myDictionary={0:'zero', '':'Empty string', None:'None value', False:'Boolean False value', ():'Empty Tuple'}
Python 3:
def is_empty(dict):
if not bool(dict):
return True
return False
test_dict = {}
if is_empty(test_dict):
print("1")
test_dict = {"a":123}
if not is_empty(test_dict):
print("1")
Nachfolgend finden Sie einfache Möglichkeiten, ein leeres Diktat zu überprüfen:
a= {}
1. if a == {}:
print ('empty dict')
2. if not a:
print ('empty dict')
Obwohl Methode 1st strenger ist als wenn a = Keine, liefert Methode 1 ein korrektes Ergebnis, aber Methode 2 liefert ein falsches Ergebnis.