PEP 532から次のステートメントに出くわしました:
__else__
if
末尾のelse
句がないため、式の短絡的な結果です__then__
else
先頭のif
句がないため、式の短絡的な結果です
それらの声明は何を意味していますか?ポイントをもう少し明確にする例はありますか?
PEP 532から次のステートメントに出くわしました:
__else__
if
末尾のelse
句がないため、式の短絡的な結果です__then__
else
先頭のif
句がないため、式の短絡的な結果ですそれらの声明は何を意味していますか?ポイントをもう少し明確にする例はありますか?
あなたは (について) PEP 532 - A circuit breaking operator and protocol を読んでいるようです。左側のオペランドにショートサーキット操作へのアクセスを与える提案です。
or
Python は現在、 andand
ブール演算子にフックする方法がありません。これらの演算子は、左側のオペランドから結果を決定できる場合、右側のオペランド式を評価する必要がないという点で短絡的です。
たとえば、次の式は例外を発生させません。
count = 0
average = count and total / count
右側の式をZeroDivisionError
実行すると例外が発生しますが。
PEP は新しい演算子 operator を提案else
します。この演算子は、左側のクラスがtrue-valueに基づいて操作の結果を処理できるようにします。だから表現では
lefthand else righthand
lefthand
クラスには、の値に応じてlefthand
またはへのアクセスが与えられます。righthand
bool(lefthand)
見つけたステートメントの完全なコンテキストを提供しませんでしたが、PEP 532 は__else__
and__then__
メソッドを定義する提案です。type(lefthand).__then__(lefthand)
がlefthand
true と見なされた場合に呼び出され、そうでない場合type(lefthand).__else__(righthand)
は次のように呼び出されます。
result = type(lefthand).__then__(lefthand) if lefthand else type(lefthand).__else__(lefthand, righthand)
これらを次のように実装できます
class CircuitBreaker:
def __bool__(self):
# am I true or false?
return someboolean
def __then__(self):
# I'm true, so return something here
return self
def __else__(self, righthand):
# I'm false, the righthand has been evaluated and pass ed in
return righthand
PEP 532 はまだ議論中であり、この提案が実装されない可能性があることに注意してください。