Frage

Ich denke, das irgendwie ist die Funktion missbrauchen, aber ich bin immer noch neugierig, ob es getan werden könnte - Ich möchte so etwas wie:

with conditional(a):
    print 1

, so dass der print 1 Teil nur dann, wenn ein == true ausgeführt. Ist das möglich?

EDIT: Wie die Menschen unten angeben, ist diese schreckliche Art. Es ist nur ein Rätsel \ Frage. Tun Sie dies nicht versuchen, zu Hause, nicht für schwache Nerven etc.

War es hilfreich?

Lösung

Es gibt keinen wirklichen Grund, das zu tun, da conditionals bereits die if Anweisung geliefert wird mit:

if a == True:
    print 1

Aber, wenn Sie nur für Spaß zu fragen ist die Antwort Sie können nicht wirklich. Um den with Inhalt von der Ausführung zu stoppen, conditional müssen irgendwie die Ausführung zu stoppen, in seiner __enter__ Methode. Aber der einzige Weg, um es tun können, eine Ausnahme erzieht, die kein anderes Codemittel laufen, wenn Sie die with mit einer try Anweisung wickeln für Fälle a != True Handhabung

Edit: da ich in den Kommentaren und Stimmen für die Verwendung der OP Zustandes (a == True) verfolgt wurde ich hielt Ändern es if a, die zum Testen conditionals das Idiom in Python natürlich ist. Aber wir nicht wissen, , was die OP im Sinne hatte, und ob er wirklich a will einen boolean sein, und will nicht Block auszuführen, wenn a = [1] (die if a passieren) I < strong> beschlossen, es zu lassen wie es ist.

Andere Tipps

if a is True:
    print 1

with Anweisung soll ein zuverlässiger bereitzustellen eingeben -exit Kontext.

Der einzige Weg, ich sehe, ist eine Ausnahme in conditional zu erhöhen, wenn ihr Argument falsch ist. Der with Körper wird nicht ausgeführt, aber noch wird eine des Code, der folgt -., Bis eine except oder finally Klausel, natürlich

Lassen Sie uns sagen, dass ich Klasse A mit einem __enter__ haben und eine __exit__ Funktion:

class A:
    def __init__(self, i):
        self.b = i
    def __exit__(*args, **kwargs):
        print "exit"
    def __enter__(*args, **kwargs):
        print "enter"

Und eine Funktion B, die in Objekt c 1 sonst, wenn b gleich prüft es wird vorübergehen.

def b(c):
    if c.b == 1:
        return c
    else:
        pass

Ich kann erreicht werden:

with b(A(1)):
    print 10


enter
10
exit

Aber es wird ein Attribut wenn b geht als mit wird nichts, mit zu arbeiten werfen. Eine Lösung wäre es, die with b(A(1)): in einem Versuch zu setzen / außer Block. Aber ich weiß nicht empfehlen dies zu tun.

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