在 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
此处条件表达式为1 if n > 0 else -1 if n < 0 else 0
。有两点意见:
表达式具有三个可能值之一,即1
,-1
或0
。
该值取决于两个条件,即n > 0
和n < 0
。
那么,作者的定义是否准确,为什么不为何?是&#34;一个表达式,其值取决于一个或多个条件,并且具有多个值中的一个(至少两个)。&#34; 条件表达式的更准确定义,为什么以及为什么不呢?
答案 0 :(得分:6)
你还有两个结果。这两个结果中的一个本身依赖于另一个条件表达式并不会改变这一点。
我在这里添加括号来说明我的观点:
1 if n > 0 else (-1 if n < 0 else 0)
因此,该表达式的结果是以下两个选项之一:
1
-1 if n < 0 else 0
第二个表达式本身就是另一个条件表达式。第一个值也只是一个表达式,一旦你对它进行了评估就会有一个值;唯一的区别是它产生了一个简单的字面值。所有这些对于顶级条件表达式没有任何影响,它仍然只处理两个结果。
请注意,实际上只评估其中一个表达式。如果这些表达中的一个具有副作用(改变表达式之外的状态)或者是昂贵的,那么这很重要。在内存或处理时间方面。例如:
import time
def sleep10secs():
time.sleep(10)
return 'slow'
print('instant' if True else sleep10secs())
会立即打印instant
,不会调用sleep10secs()
函数。