Wenn ich (zum Beispiel) ein Listenverständnis wie dieses habe:
['' for x in myList]
Wenn ich effektiv eine neue Liste erstelle, die für jedes Element in einer Liste eine leere Zeichenfolge enthält, verwende ich niemals die x
. Gibt es eine sauberere Schreibweise, damit ich die nicht verwendete x
Variable nicht deklarieren muss ?
a=[[]]*4;a[0].append(5);print(a)
for
zum Beispiel verschachtelte Schleifen mache ? Oder wennfor _ in range(...)
ich drinnen sagen will_, var = f(x)
? Wird es zwischen den beiden_
Variablen verwechselt ?Nein. Wie der Zen es ausdrückt: Sonderfälle sind nicht speziell genug, um die Regeln zu brechen. Der Sonderfall sind Schleifen, bei denen die Elemente des zu iterierenden Objekts nicht verwendet werden, und die Regel lautet, dass ein "Ziel" zum Entpacken vorhanden ist.
Sie können jedoch einen
_
Variablennamen verwenden, der normalerweise als "absichtlich nicht verwendet" verstanden wird (selbst PyLint usw. weiß dies und respektiert dies).quelle
C: 10,24: Invalid variable name "_" (invalid-name)
sei denn, Sie fügen esgood-names
in Ihrem hinzu.pylintrc
.Es stellt sich heraus, dass die Verwendung
dummy*
(Startwort ist Dummy) als Variablenname den gleichen Trick wie_
._
ist ein bekannter Standard und es wäre besser, aussagekräftige Variablennamen zu verwenden. So Sie verwenden könnendummy
,dummy1
,dummy_anything
. Durch die Verwendung dieser VariablennamenPyLint
wird nicht beanstandet.quelle
Fügen Sie nach der for-Schleife in derselben Zeile den folgenden Kommentar hinzu:
#pylint: disable = unbenutzte Variable
quelle
Wenn Sie Ihre Argumente benennen müssen (z. B. wenn Sie Mocks schreiben, die bestimmte Argumente nicht verwenden, auf die namentlich verwiesen wird), können Sie diese Verknüpfungsmethode hinzufügen:
und dann benutze es so
quelle
Die Generatorobjekte verwenden die Variablen nicht wirklich. Also so etwas wie
sollte den Trick machen. Beachten Sie, dass x nicht als Variable außerhalb des Generatorverständnisses definiert ist.
quelle
Sie können auch einen Variablennamen voranstellen,
_
wenn Sie der Variablen lieber einen lesbaren Namen geben möchten. Zum Beispiel können Sie verwenden_foo
,_foo1
,_anything
und PyLint nicht beschweren. In einer for-Schleife wäre es wie folgt:bearbeiten: Beispiel hinzufügen
quelle
Ein ausführlicher Weg ist:
Sie vermeiden es, eine verwendete Variable auf diese Weise zu deklarieren.
Sie können auch veränderbare und unveränderliche Objekte (wie Wörterbücher) anhängen
newList
.Eine andere Sache für Python-Neulinge wie mich, '_', 'Dummy', sind etwas beunruhigend.
quelle
Kommentar zu Wie kann ich umgehen, dass eine nicht verwendete Variable in einer for-Schleife deklariert wird? (Keine Kommentargröße mehr)
Python behält dieselbe Referenz für das erstellte Objekt bei. (unabhängig von der Veränderlichkeit), zum Beispiel
Sie können sowohl i als auch j sehen und sich auf dasselbe Objekt im Speicher beziehen. Was passiert, wenn wir den Wert einer unveränderlichen Variablen ändern?
Sie können sehen, dass j jetzt beginnt, auf einen neuen Ort zu zeigen (wo 2 gespeichert ist), und i zeigt immer noch auf den Ort, an dem 1 gespeichert ist. Während der Bewertung
Der Wert wird aus 142671248 ausgewählt, berechnet (falls nicht bereits zwischengespeichert) und an einer neuen Position 142671236 abgelegt. J zeigt auf die neue Position. Einfacher ausgedrückt wird eine neue Kopie erstellt, die jedes Mal erstellt wird, wenn eine unveränderliche Variable geändert wird.
Wandlungsfähigkeit
Veränderliche Objekte verhalten sich in dieser Hinsicht kaum anders. Wenn der Wert durch zeigt
Sowohl a als auch b zeigen auf denselben Speicherort.
Der Speicherort, auf den a zeigt, wird geändert.
Sowohl a als auch b zeigen immer noch auf denselben Speicherort. Mit anderen Worten, veränderbare Variablen wirken auf denselben Speicherort, auf den die Variable zeigt, anstatt eine Kopie des Werts zu erstellen, auf den die Variable zeigt, wie im Fall einer unveränderlichen Variablen.
quelle