Skip to main content
 首页 » 编程设计

python之“An expression that has one of two values, depending on a condition.” 是条件表达式的准确定义吗

2025年05月04日15over140

在Think Python,第二版中,作者将条件表达式定义为“具有两个值之一的表达式,具体取决于条件。” 但经过反射(reflection),我认为定义的准确性可能值得怀疑。这是一个使用条件表达式编写的函数:

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 , -1 , 或 0 .

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

那么,作者的定义准确吗,为什么,为什么不准确?是“一个表达式,其值取决于一个或多个条件,并且具有多个值之一(至少两个)。”条件表达式的更准确定义,为什么为什么不呢?

请您参考如下方法:

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

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

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()) 

将打印 instant立即,sleep10secs()函数未被调用。