是"具有两个值之一的表达式,具体取决于条件."条件表达式的准确定义?

Mah*_*eeb 1 python conditional definition conditional-statements python-3.x

Think Python第2版中,作者将条件表达式定义为"具有两个值之一的表达式,具体取决于条件".但在我反思之后,我认为定义的准确性可能有问题.这是一个使用条件表达式编写的函数:

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
Run Code Online (Sandbox Code Playgroud)

这里的条件表达式是1 if n > 0 else -1 if n < 0 else 0.有两点意见:

  • 表达具有一个3个可能的值,即1,-1,或0.

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

那么,作者的定义是否准确,为什么以及为什么不呢?是"一个表达式,其值取决于一个或多个条件,并且具有多个值中的一个(至少两个)." 更准确的条件表达式定义,为什么不为什么?

Mar*_*ers 6

你还有两个结果.这两个结果中的一个本身依赖于另一个条件表达式并不会改变这一点.

我在这里添加括号来说明我的观点:

1 if n > 0 else (-1 if n < 0 else 0)
Run Code Online (Sandbox Code Playgroud)

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

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

第二个表达式本身是另一个条件表达式.第一个值也只是一个表达式,一旦你评估它就会有一个值; 唯一的区别是它产生了一个简单的字面值.所有这些对顶级条件表达式没有影响,它仍然只处理两个结果.

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

import time

def sleep10secs():
    time.sleep(10)
    return 'slow'

print('instant' if True else sleep10secs())
Run Code Online (Sandbox Code Playgroud)

instant立即打印,sleep10secs()不调用该功能.