在Python中,表达式和语句之间的区别是什么?


当前回答

语句包含关键字。

表达式不包含关键字。

打印“hello”是语句,因为打印是一个关键字。

“hello”是一个表达式,但列表压缩反对这一点。

下面是一个表达式语句,它在没有列表理解的情况下是正确的:

(x*2 for x in range(10))

其他回答

表达式是返回值的语句。因此,如果它可以出现在赋值操作的右侧,或者作为方法调用的参数,那么它就是一个表达式。 有些代码可以是表达式,也可以是语句,这取决于上下文。当这两者模棱两可时,语言可能有一种方法来区分它们。

表达式是可以简化为值的东西,例如“1+3”是一个表达式,但“foo = 1+3”不是。

很容易检查:

print(foo = 1+3)

如果它不起作用,它就是一个语句,如果它起作用,它就是一个表达式。

另一种说法可以是:

class Foo(Bar): pass

因为它不能被简化为一个值。

表达——摘自《新牛津美语词典》:

数学是一个集合 这些符号共同表达了 的表达式 圆的周长是2πr。

一般来说:表达式至少产生一个值。

在Python中,表达式在Python语言参考中有广泛的介绍。通常,Python中的表达式由原子(Atoms)、基本元素(primary)和操作符(Operators)在语法上合法的组合组成。

来自维基百科的Python表达式

表达的例子:

文字和与操作符、内置函数或用户编写的函数的语法正确组合:

>>> 23
23
>>> 23l
23L
>>> range(4)
[0, 1, 2, 3] 
>>> 2L*bin(2)
'0b100b10'
>>> def func(a):      # Statement, just part of the example...
...    return a*a     # Statement...
... 
>>> func(3)*4
36    
>>> func(5) is func(a=5)
True

维基百科声明:

在计算机程序设计中,语句 可以被认为是最小的 命令的独立元素 编程语言。程序是 由一个或多个序列组成的 语句。声明将包含 内部组件(例如, 表达式)。

来自维基百科的Python语句

总的来说:语句做某事,通常由表达式(或其他语句)组成。

Python语言参考涵盖了简单语句和复合语句。

“语句做某事”和“表达式产生值”的区别可能变得模糊:

List Comprehensions are considered "Expressions" but they have looping constructs and therfore also Do Something. The if is usually a statement, such as if x<0: x=0 but you can also have a conditional expression like x=0 if x<0 else 1 that are expressions. In other languages, like C, this form is called an operator like this x=x<0?0:1; You can write you own Expressions by writing a function. def func(a): return a*a is an expression when used but made up of statements when defined. An expression that returns None is a procedure in Python: def proc(): pass Syntactically, you can use proc() as an expression, but that is probably a bug... Python is a bit more strict than say C is on the differences between an Expression and Statement. In C, any expression is a legal statement. You can have func(x=2); Is that an Expression or Statement? (Answer: Expression used as a Statement with a side-effect.) The assignment statement of x=2 inside of the function call of func(x=2) in Python sets the named argument a to 2 only in the call to func and is more limited than the C example.

表达式是某种东西,而语句是某种东西。 表达式也是语句,但它必须有一个返回值。

>>> 2 * 2          #expression
>>> print(2 * 2)     #statement

PS:解释器总是打印出所有表达式的值。

语句包含关键字。

表达式不包含关键字。

打印“hello”是语句,因为打印是一个关键字。

“hello”是一个表达式,但列表压缩反对这一点。

下面是一个表达式语句,它在没有列表理解的情况下是正确的:

(x*2 for x in range(10))