是“取决于条件的两个值之一的表达式.”有条件表达的准确定义



in think think python,第二版,作者将条件表达式定义为"具有两个值之一的表达式,取决于条件。" ,但是在我反思之后,我认为定义的准确性 May 是值得怀疑的。这是使用条件表达式编写的函数:

def get_sign(n):
    """Returns 1 if n is a positive number, -1 if n is a negative number,
    or 0 if n is a zero
    """
    return 1 if n > 0 else -1 if n < 0 else 0

这里的条件表达式为 1 if n > 0 else -1 if n < 0 else 0。并且有两个观察结果:

  • 该表达式具有三个可能的值之一,即1-10

  • 该值取决于两个条件,即n > 0n < 0

那么,作者的定义准确,为什么和为什么不呢?IS "一个表达式的值取决于一个或多个条件,并且具有几个值之一(至少两个)。为什么不呢?

您仍然有两个结果。这两个结果中的一个本身取决于另一种条件表达不会改变这一点。

我在这里添加了括号,以说明我的观点:

1 if n > 0 else (-1 if n < 0 else 0)

因此,该表达式的结果是这两个选项之一:

  1. 1
  2. -1 if n < 0 else 0

第二个表达式本身就是另一种条件表达式。第一个值也只是一个表达式,一旦您对其进行了评估,它就具有一个值。唯一的区别是它产生了简单的文字价值。所有这些对顶级条件表达式没有任何影响,它仍然仅处理两个结果。

请注意,实际上只评估了其中一种表达式。这很重要,如果其中一种表达式具有副作用(在表达式之外改变状态)或在记忆或处理时间方面"昂贵"。例如:

import time
def sleep10secs():
    time.sleep(10)
    return 'slow'
print('instant' if True else sleep10secs())

将立即打印instantsleep10secs()功能未调用。

最新更新