if语句是一个表达式还是一个语句?谁能定义这两个?我之所以将其视为条件表达式,但这让我感到困惑的是它通常被称为if语句而不是表达式。
答案 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
作为关键字,条件表达式中需要关键字else
,if
语句中可选),两者都评估条件({{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
)