2016-12-06 22 views
-2

我碰到下面的语句从PEP 532短路的结果

  • __else__if表达短路结果由于 没有尾随else条款
  • __then__的是短期由于 缺少领先的if子句
由于表达式短路结果

这些陈述的含义是什么?有没有什么例子可以更清楚地说明这些问题?

+0

继续阅读你正在阅读的PEP(你没有链接)。 – user2357112

+0

你是什么意思的“从这里”? – melpomene

+0

http://www.computerhope.com/jargon/s/shortcircuit-operator.htm –

回答

2

您似乎正在阅读(约)PEP 532 - A circuit breaking operator and protocol,建议让左手操作数访问短路操作。

Python目前没有办法挂钩orand布尔运算符;这些运算符短路之处在于,如果可以从左侧操作数确定结果,则不需要评估右侧操作数表达式。

例如,下面的表达式将不会产生异常:

count = 0 
average = count and total/count 

即使右手表达将提高ZeroDivisionError异常,如果运行。

PEP提出了一个新操作员else操作员,该操作员可以让左侧的操作员根据操作结果truth-value来处理操作的结果。因此,在表达

lefthand else righthand 

lefthand类视bool(lefthand)值被给定接入要么lefthandrighthand

您没有给出您找到的语句的完整上下文,但PEP 532是定义__else____then__方法的提议;当lefthand被认为是真正的type(lefthand).__then__(lefthand)叫,否则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 仍在讨论,它可能是这个提案从未实施。