是“具有两个值之一的表达式,具体取决于条件。”条件表达式的准确定义?
Is “An expression that has one of two values, depending on a condition.” an accurate definition of conditional expression?
在Think Python, 2nd Edition中,作者将条件表达式定义为"An expression that has one of two values, depending on a condition." 但经过反思,我认为这个定义的准确性可能值得商榷。这是一个使用条件表达式编写的函数:
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
。
那么,作者的定义准确吗,为什么,为什么不准确? "An expression whose value depends on one or more conditions, and that has one of several values (at least two)."是条件表达式更准确的定义吗,为什么,为什么不呢?
你还有两个结果。这两个结果之一本身取决于 另一个 条件表达式不会改变这一点。
我在这里添加了括号来说明我的观点:
1 if n > 0 else (-1 if n < 0 else 0)
所以该表达式的结果是以下两个选项之一:
1
-1 if n < 0 else 0
第二个表达式本身就是另一个条件表达式。第一个值也只是一个表达式,一旦你计算它就有一个值;唯一的区别是它产生一个简单的文字值。所有这些对顶级条件表达式没有影响,它仍然只处理两个结果。
请注意,实际上只有一个表达式被求值。如果这些表达式之一有副作用(改变表达式外的状态)或者在内存或处理时间方面 'expensive',这很重要。例如:
import time
def sleep10secs():
time.sleep(10)
return 'slow'
print('instant' if True else sleep10secs())
会立即打印instant
,不会调用sleep10secs()
函数。
在Think Python, 2nd Edition中,作者将条件表达式定义为"An expression that has one of two values, depending on a condition." 但经过反思,我认为这个定义的准确性可能值得商榷。这是一个使用条件表达式编写的函数:
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
。
那么,作者的定义准确吗,为什么,为什么不准确? "An expression whose value depends on one or more conditions, and that has one of several values (at least two)."是条件表达式更准确的定义吗,为什么,为什么不呢?
你还有两个结果。这两个结果之一本身取决于 另一个 条件表达式不会改变这一点。
我在这里添加了括号来说明我的观点:
1 if n > 0 else (-1 if n < 0 else 0)
所以该表达式的结果是以下两个选项之一:
1
-1 if n < 0 else 0
第二个表达式本身就是另一个条件表达式。第一个值也只是一个表达式,一旦你计算它就有一个值;唯一的区别是它产生一个简单的文字值。所有这些对顶级条件表达式没有影响,它仍然只处理两个结果。
请注意,实际上只有一个表达式被求值。如果这些表达式之一有副作用(改变表达式外的状态)或者在内存或处理时间方面 'expensive',这很重要。例如:
import time
def sleep10secs():
time.sleep(10)
return 'slow'
print('instant' if True else sleep10secs())
会立即打印instant
,不会调用sleep10secs()
函数。