definiert Ich habe diesen Code bekam:Python verschachtelt Wörterbuch Verständnis in statischen Klassenbereich: Variable nicht
class Chars:
char_to_number = {
'a': ['1'],
'b': ['2'],
'c': ['3', '6'],
'd': ['4', '5'],
}
number_to_char = {
number: char
for char in char_to_number
for number in char_to_number[char]
}
Nun dieser Code gibt einen Fehler als solche: name 'char_to_number' is not defined
Jetzt ist es wie Python sieht könnte das verschachtelte Wörterbuchverständnis nicht analysieren. Es sieht so aus, als ob der innere Bereich nicht mit dem äußeren Bereich aktualisiert wurde, der die Variable char_to_number
definiert hat.
Ich habe diesen Code mit dieser Implementierung gelöst:
class Chars:
char_to_number = {
'a': ['1'],
'b': ['2'],
'c': ['3', '6'],
'd': ['4', '5'],
}
number_to_char = {
number: char
for char, optional_numbers in char_to_number.items()
for number in optional_numbers
}
hier nicht die char_to_number Variable in der inneren Schleife ich bin, und Python gelang es diesen Code zu analysieren.
Natürlich geschieht das alles im globalen Umfang der Klasse. Im globalen Python Umfang, ist es nicht passieren:
char_to_number = {
'a': ['1'],
'b': ['2'],
'c': ['3', '6'],
'd': ['4', '5'],
}
number_to_char = {
number: char
for char in char_to_number
for number in char_to_number[char]
}
Hat jemand eine Ahnung davon?
dieser ist offensichtlich, und es ist ähnlich zu meinem 3. Beispiel. Python analysiert anders, wenn es um den globalen Gültigkeitsbereich der Klasse geht. –
Ich kann nur vermuten, dass Python die verschachtelten Schleifen in eine lokale Domäne analysiert. Nicht die erste "für char in char_to_number", wo Sie Argumente geben. Aber in der zweiten, "Nummer inchar_to_number [char]", wo es lokal mit dem ersten passiert. Also meine Vermutung ist, dass Sie tatsächlich etwas wie >> LoopFunction() {char; LoopFunction2(); }, daher wird das lokale Argument "char_to_number" nicht erkannt ("char" sollte kein Problem haben). Die Lösung besteht darin, Global entweder in Global oder Class zu machen. Es ist hypothetisch, nie den Quellcode für Verständnisschleifen gesehen. – armatita