2009-09-13 12 views
26

Ich verwende eine Bibliotheksfunktion namens get_count_and_price, die ein 2-Tupel (Anzahl, Preis) zurückgibt. An vielen Orten verwende ich sowohl Zeit als auch Preis. In einigen brauche ich nur Zeit oder Preis. Also gerade jetzt, wenn ich nur zählen muss, zähle ich zu (count, price) und lasse den Preis ungenutzt.In Python gibt es ein "pass" -Equivalent für eine Variablenzuweisung

Dies funktioniert gut und verursacht keine Probleme an und für sich. Allerdings

...

Ich benutze Eclipse PyDev, und die neue Version 1.5 zeigt automatisch Fehler und Warnungen. Eine der Warnungen, die es zeigt, sind ungenutzte Variablen. Im obigen Beispiel wird der Preis als nicht verwendet markiert. Dies ist die Art von Verhalten, die großartig ist und ich schätze es sehr, dass PyDev das für mich getan hat. Allerdings möchte ich die Preisaufgabe insgesamt überspringen. Im Idealfall möchte ich etwas wie:

(count,None) = get_count_and_price() 

Nun, wie wir alle wissen, kann keine zugeordnet werden. Kann ich in diesem Fall noch etwas anderes machen?

Ich weiß, dass ich so etwas wie

count = get_count_and_price()[0] 

tun könnte, aber ich bitte nur um zu sehen, ob jemand irgendwelche bessere Vorschläge hat.

Antwort

29

Ich denke, es ist nichts falsch mit der Verwendung der [0] tiefgestellt, aber manchmal Leute verwenden die "Wegwerf" Variable _. Es ist eigentlich genau wie jede andere Variable (mit spezieller Verwendung in der Konsole), außer dass einige Python-Benutzer entschieden haben, dass es als Konvention "wegwerfen" soll.

count, _ = get_count_and_price() 

Über das PyDev-Problem sollten Sie den Index [0] trotzdem verwenden. Aber wenn Sie wirklich _ verwenden möchten, ist die einzige Lösung, die unbenutzten variablen Warnungen zu deaktivieren, wenn Sie das stört.

+7

seien Sie vorsichtig. Denken Sie daran, dass '_' in einem interaktiven Python-Interpreter eine besondere Bedeutung hat, und wenn Sie ihm zuweisen, wird diese Magie weggenommen. – SingleNegationElimination

+0

@TokenMacGuy: ja ich weiß, ich schrieb darüber in einer ähnlichen Frage hier http://stackoverflow.com/questions/818828/isit-possible-to-implement-a-python-for-range-loop-without -an-Iterator-Variable/818836 # 818836 – Unknown

+6

Haskell und Erlang verwenden auch _ als "Wegwerf" -Variable. –

3

Wir machen das oft.

count, _ = get_count_and_price() 

oder diese

count, junk = get_count_and_price() 
7

Wenn Sie die Eclipse gehen -> Einstellungen ... Fenster können Sie tatsächlich die PyDev sollten Variablennamen angeben ignorieren, wenn sie ungenutzt sind (ich bin auf der Suche auf die neueste PyDev 1.5.X).

Wenn Sie PyDev gehen -> Editor -> Code-Analyse und im letzten Feld sehen, der sagt „berichten, nicht ungenutzt Variable Sie, wenn der Name beginnt mit“

Geben Sie, was auch immer Namen, die Sie dort wollen und dann verwenden Dieser Name beschränkt die Variablennamen, für die PyDev nicht verwendete Warnungen ignoriert.

Standardmäßig sieht es so aus, als ob PyDev nicht verwendete Variablenwarnungen für Variablen verbergen würde, deren Namen mit "dummy", "_" oder "unused" beginnen.

Wie @TokenMacGuy unten sagte, würde ich empfehlen, nur "_" zu verwenden, da es in bestimmten Szenarien in Python eine besondere Bedeutung hat (speziell wird es im interaktiven Interpreter verwendet).

+0

Während Sie einen guten Punkt machen über _ _ mit besonderer Bedeutung in Der Dolmetscher, mein Eindruck ist, dass es ziemlich weit verstanden wird, eine andere spezielle Bedeutung (wenn nur durch Konvention) im geschriebenen Code zu haben. –

20

Die Verwendung von _, wie vorgeschlagen, könnte einige Probleme haben (obwohl es meistens OK ist).Nach den Python-Stilrichtlinien, die wir bei der Arbeit verwenden, würde ich normalerweise count, unused_price = ... verwenden, da pylint so konfiguriert ist, dass es die Zuweisung zu Barnamen ignoriert, beginnend mit unused_ (und bei Verwendung eines solchen Barnamens warnen! -). Aber ich weiß nicht, wie man PyDev anweist, sich so zu verhalten! stattdessen aus diesen Gründen

+3

Ich habe gerade ein Upgrade auf PyDev 2.2.2 durchgeführt und es scheint, dass es jetzt die 'unused_' Konvention standardmäßig erkennt und keine Warnung gibt – Jonathan

2

Ich würde eher es _price nennen:

  • Es löst den Konflikt mit gettext und der interaktiven Eingabeaufforderung, die beide verwenden _

  • es einfach wieder in sich ändern price wenn Sie es später brauchen.

  • Wie bereits erwähnt, hat der führende Unterstrich in vielen Sprachen bereits die Bedeutung "intern" oder "unbenutzt".

So Ihr Code würde am Ende wie folgt suchen:

(count, _price) = get_count_and_price() 
1

ich nach einem Necromancer Abzeichen gehen werde. :)

Sie sagten, Sie verwenden PyDev. In PyDev (zumindest in den letzten Versionen - ich habe nicht überprüft, wie weit zurück), wird jeder Variablenname, der mit "unbenutzt" beginnt, von der Warnung "Nicht verwendete Variable" ausgenommen. Andere statische Analyse-Tools können sich zwar immer noch beschweren (pyflakes tut dies - aber diese Warnung scheint in einem Tupel-entpackenden Kontext trotzdem ignoriert zu werden).

Verwandte Themen