Was ist die Rangfolge beim schreiben eine doppelte Ungleichheit in Python (explizit im code, und wie kann dieser überschrieben werden, für die arrays?)

Was ist der spezifische code, in order, ausgeführt wird, wenn ich nach etwas Fragen, wie

>>> 1 <= 3 >= 2
True

Wenn beide haben die gleiche Priorität und es ist einfach die Reihenfolge Ihrer Auswertung, warum die zweite Ungleichung Funktion als (3 >= 2) statt (True >= 2)

Betrachten Sie zum Beispiel den Unterschied zwischen diesen

>>> (1 < 3) < 2
True

>>> 1 < 3 < 2
False

Ist es nur eine Reine syntaktische short-cut " hart-codiert in Python zu erweitern, die zweite als die and von den beiden Aussagen?

Konnte ich dieses Verhalten ändern, für eine Klasse, so dass a <= b <= c wird erweitert, um etwas anderes? Es sieht wie im folgenden ist der Fall

a (logical operator) b (logical operator) c 
    --> (a logical operator b) and (b logical operator c)

aber die eigentliche Frage ist, wie dieser wird in code umgesetzt.

Ich bin neugierig, so dass ich replizieren kann, diese Art von __lt__ und __gt__ Verhalten in einige meiner eigenen Klassen, aber ich bin verwirrt darüber, wie dies erreicht wird, hält die Mitte argument konstant.

Hier ist ein konkretes Beispiel:

>>> import numpy as np

>>> tst = np.asarray([1,2,3,4,5,6])

>>> 3 <= tst
array([False, False,  True,  True,  True,  True], dtype=bool)

>>> 3 <= tst <= 5
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/ely/<ipython-input-135-ac909818f2b1> in <module>()
----> 1 3 <= tst <= 5

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Wäre es schön, dies zu ändern, so dass es "funktioniert einfach" mit arrays zu, wie diese:

>>> np.logical_and(3 <= tst, tst <= 5)
array([False, False,  True,  True,  True,  False], dtype=bool)

Hinzugefügt zur Klärung

In die Kommentare es wird darauf hingewiesen, dass ich habe einen schlechten job erklären die Frage. Hier einige klärende Bemerkungen:

1) ich bin nicht der Suche nach einer einfachen Erklärung der Tatsache, dass der Dolmetscher erscheint ein and zwischen den beiden angekettet Ungleichheiten. Ich wusste bereits, dass und sagte so oben.

2) Für eine Analogie zu dem, was ich tun will, betrachten Sie das with - Anweisung (link). Die folgenden:

with MyClass(some_obj) as foo:
    do_stuff()

entpackt in

foo = MyClass(some_obj)
foo.__enter__()
try:
    do_stuff()
finally:
    foo.__exit__()

So schreiben MyClass angemessen, ich kann viele Besondere Dinge in der with - Anweisung.

Ich Frage, ob es einen ähnlichen code Auspacken der verketteten Ungleichheit, durch die ich abfangen kann, was es tut, und leiten Sie zu verwenden der array-Stil logischen Operatoren statt nur für die Klassen I-Sorgfalt über.

Ich glaube, das ist ganz klar aus meiner Frage, die vor allem das Beispiel, aber ich hoffe das macht es klarer.

InformationsquelleAutor ely | 2012-09-30
Schreibe einen Kommentar