技术上什么是if语句?

时间:2017-03-21 18:15:03

标签: python python-3.x if-statement conditional conditional-statements

if语句是一个表达式还是一个语句?谁能定义这两个?我之所以将其视为条件表达式,但这让我感到困惑的是它通常被称为if语句而不是表达式。

2 个答案:

答案 0 :(得分:3)

你混淆了两件不同的事情。 Python代码由语句组成。语句可以包含表达式,表达式会产生结果。表达式可以由更多表达式组成,表达式不能包含语句。

if statement之类的东西。 if语句控制程序的流程(根据测试表达式的结果执行不同的套件):

if sometest:
    # execute if sometest is true
elif someothertest:
    # execute if sometest was false and someothertest is true
else:
    # execut if both sometest and someothertest are false

还有conditional expression之类的东西;这会产生一个结果,基于构成组件(根据中间的条件表达式评估其中包含的两个表达式之一并返回其结果):

# will produce either the outcome of true_expression or false_expression
true_expression if sometest else false_expression

这两个概念是截然不同的;一个是语句(语言的顶级组件),另一个是表达式(因此产生结果)。它们具有密切相关的语法(使用if作为关键字,条件表达式中需要关键字elseif语句中可选),两者都评估条件({{1 }}语句可以评估更多),但这就是他们的关系结束的地方。

或者,更多地强调差异:

  • if语句中的套件可以包含更多语句。您可以使用if语句在两个函数定义或两个类之间进行选择,或选择要导入的内容。你不能在表达式中这样做,因为表达式不能包含语句。
  • 条件表达式可以是更大表达式的一部分,而您不能将语句放在表达式中。因此,您可以使用条件表达式来微调表达式。

答案 1 :(得分:0)

if语句的示例

if x > 6:
    a = 3
else:
    a = 4

条件表达式的示例:从=

开始的部分
a = 3 if x > 6 else 4

这是两种完全不同的语言结构,但在这里它们实现了相同的结构。

这里的条件表达式比if语句更紧凑。 但是如果条件表达式变得更复杂,它们往往变得难以阅读和调试,例如:

    x = (
            self.intervalWidthNode.old + self.parent.phaseModule.deltaXyNode.new [0] / self.parent.phaseModule.pixelsPerUnitXyNode.new [0]
        if (
            isinstance (self.imageFactoryNode.new, mk.AllColorsImageFactory) and
            self.parent.phaseModule.deltaXyNode.triggered and
            self.parent.phaseModule.inTransferAreaXyNode.new == (False, False)
        ) else
            self.imageFactoryNode.new.intervalWidth
        if (
            isinstance (self.imageFactoryNode.new, mk.AllColorsImageFactory) and
            self.imageFactoryNode.touched
        ) else
            self.intervalWidthNode.old
    )