【问题标题】:Is “An expression that has one of two values, depending on a condition.” an accurate definition of conditional expression?是“根据条件具有两个值之一的表达式。”条件表达式的准确定义?
【发布时间】:2017-09-08 11:48:41
【问题描述】:

Think Python, 2nd Edition中,作者将条件表达式定义为“根据条件具有两个值之一的表达式。” 但经过思考后,我认为定义的准确性可能有问题。这是一个使用条件表达式编写的函数:

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 &gt; 0 else -1 if n &lt; 0 else 0。对此有两个观察结果:

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

  • 取值取决于两个条件,分别是n &gt; 0n &lt; 0

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

【问题讨论】:

  • 每个条件表达式只有2个结果。恰好第一个表达式的结果之一是另一个条件表达式。
  • 根据条件计算两个子表达式之一的表达式。
  • @StevenRumbalski 这是一个非常好的定义!它有助于理清思路。谢谢。

标签: python python-3.x conditional conditional-statements definition


【解决方案1】:

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

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

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

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

  1. 1
  2. -1 if n &lt; 0 else 0

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

请注意,实际上只有一个表达式被计算。如果其中一个表达式有副作用(改变表达式之外的状态)或者在内存或处理时间方面“昂贵”,这很重要。例如:

import time

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

print('instant' if True else sleep10secs())

将立即打印instant,不会调用sleep10secs() 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2013-12-22
    • 2016-08-23
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多