Frage

    

Diese Frage bereits eine Antwort hier:

         

Wenn IF-Anweisungen in Python verwenden, müssen Sie das tun, im Anschluss an die „Kaskade“ Arbeit richtig zu machen.

if job == "mechanic" or job == "tech":
        print "awesome"
elif job == "tool" or job == "rock":
        print "dolt"

Gibt es eine Möglichkeit Python zu machen mehrere Werte akzeptieren, wenn die Überprüfung für „gleich zu“? Zum Beispiel:

if job == "mechanic" or "tech":
    print "awesome"
elif job == "tool" or "rock":
    print "dolt"
War es hilfreich?

Lösung

if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

Die Werte in Klammern sind ein Tupel. Die Kontrollen in Operator, um zu sehen, ob die linke Seite Artikel irgendwo innerhalb des rechten Griff Tupel auftritt.

Beachten Sie, dass, wenn Python ein Tupel oder eine Liste mit dem in Operator sucht, hat es eine lineare Suche der Fall ist. Wenn Sie eine große Anzahl von Elementen auf der rechten Seite haben, könnte dies ein Performance-Engpass sein. Eine größere Art und Weise, dies zu tun wäre, eine frozenset :

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
    if job in AwesomeJobs:
        print "awesome"

Die Verwendung von frozenset über set bevorzugt, wenn die Liste von awesome Jobs muss nicht während des Betriebes des Programms geändert werden.

Andere Tipps

Sie können mit in:

if job  in ["mechanic", "tech"]:
    print "awesome"

Bei sehr großen Zahlen Überprüfung kann es auch wert sein, einen Satz der Elemente Speicherung abhaken, da dies schneller sein wird. ZB.

AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...

def func():
    if job in AwesomeJobs:
        print "awesome"
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

Während ich glaube nicht, können Sie tun, was Sie direkt wollen, eine Alternative ist:

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"

Tupeln mit konstanten Elementen werden sich als Konstanten in der kompilierten Funktion gespeichert. Sie können mit einem einzigen Befehl geladen werden. Listen und Sätze auf der anderen Seite, sind immer bei jeder Ausführung konstruieren neu.

Die beiden Tupeln und Listen verwenden lineare Suche nach dem in-Operator. Sets verwenden ein Hash-basierter Look-up, so dass es für eine größere Anzahl von Optionen schneller sein.

In anderen Sprachen würde ich einen Schalter / select-Anweisung verwenden, um den Job zu erledigen. Sie können in Python tun zu .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top