2017-12-24 20 views
0

Ich habe einen mehrteiligen booleschen Ausdruck in einem Stück Python-Code, von denen Teil beinhaltet einen Aufruf an einen Zufallsgenerator und Auswertung einer exponentiellen Summe eines 2d-Array. Da dies tief in verschachtelten Schleifen vergraben ist, möchte ich es vermeiden, diesen letzten Teil zu überprüfen, wenn es überhaupt möglich ist, da es rechenintensiv ist.Reihenfolge der Auswertung von booleschen Ausdruck in Python

if self.B == 0 or (np.sign(self.B) == -sign) or (np.random.rand() < np.exp(-2*sign*self.B*np.sum(cluster))): 
    do stuff 

Wenn einer der beiden ersten Ausdrücke wahr ist, wird der Zufallszahlengenerator noch aufgerufen? Oder ist es garantiert, diese Teile in der richtigen Reihenfolge zu bewerten und zu stoppen, sobald sie einen gefunden hat, der wahr ist?

Ich kann es immer explizit machen, indem ich es aufspalte, aber es scheint etwas, das ich wahrscheinlich sowieso wissen sollte.

Antwort

1

In if A or B wird B nur ausgewertet, wenn A falsch ist.

Dieses Konzept wird short circuiting genannt, und man kann ein wenig darüber here.

Die Idee zu lesen ist, dass man von links nach rechts gehen bis ein Ergebnis bestimmt wird. Sobald das der Fall ist, hörst du auf.

+0

Das hätte ich mir erhofft. Vielen Dank! – KBriggs

Verwandte Themen