在Python中,表达式和语句之间的区别是什么?
表达式只包含标识符、文本和运算符,其中运算符包括算术和布尔运算符、函数调用运算符()、订阅运算符[]等,并且可以简化为某种"值",可以是任何python对象。实例:
1
2
3
43 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7
另一方面,语句(参见1,2)是可以组成一行(或多行)Python代码的所有内容。注意,表达式也是语句。实例:
1
2
3
4
5# all the above expressions
print 42
if x: do_y()
return
a = 7
表达式是语句的一部分
@bismigalis:每个有效的python表达式都可以用作语句(称为"expression语句")。从这个意义上说,表达式就是语句。
是的,你是对的,我没有考虑这个案子。
表达式还可以包括函数调用(包括对象实例化的调用类)。从技术上讲,这些"标识符"与绑定到=语句中的值的名称完全相同…即使绑定是通过"def"或"class"关键字进行的。然而,对于这个答案,我将分别拼出函数调用来说明这一点。
@Jimdennis:我给出的示例列表包括一个函数调用(第二个示例)。我还包含了完整语法的链接,所以我想我已经讨论过了。
if condition: do_y()是一个语句,但三元运算符x if condition else y是一个表达式(条件表达式)
表达式——来自我的字典:
expression: Mathematics a collection
of symbols that jointly express a
quantity : the expression for the
circumference of a circle is 2πr.
总的来说:表达式至少产生一个值。
在python中,表达式在python语言引用中被广泛覆盖,通常,python中的表达式由原子、主元素和运算符的语法合法组合组成。
维基百科的python表达式
表达式示例:
与运算符和内置函数或用户编写函数的调用的文字和语法正确组合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15>>> 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
维基百科的声明:
In computer programming a statement
can be thought of as the smallest
standalone element of an imperative
programming language. A program is
formed by a sequence of one or more
statements. A statement will have
internal components (e.g.,
expressions).
维基百科的python语句
总的来说:陈述可以做一些事情,通常由表达(或其他陈述)组成。
python语言参考广泛涵盖简单语句和复合语句。
但是,"语句做某事"和"表达式产生值"的区别可能变得模糊:
列表理解被认为是"表达式",但它们有循环结构,因此也可以做一些事情。
if通常是一个语句,例如if x<0: x=0,但也可以有一个条件表达式,如x=0 if x<0 else 1是表达式。在其他语言中,如c,这种形式被称为像x=x<0?0:1;这样的运算符。
您可以通过编写函数来编写自己的表达式。def func(a): return a*a是一个使用时的表达式,但在定义时由语句组成。
返回None的表达式是python中的一个过程:def proc(): pass在语法上,可以使用proc()作为表达式,但这可能是一个错误…
python比say c对表达式和语句之间的区别更严格。在C语言中,任何表达都是法律声明。你可以用func(x=2);这是表达式还是语句?(回答:用作有副作用的陈述的表达式)func(x=2)的形式在python中是非法的(或者至少它有不同的含义func(a=3)将命名参数a设置为3)
尽管这与python无关:
expression的计算结果是一个值。一个statement做了一些事情。
1
2
3
4>>> x = 1
>>> y = x + 1 # an expression
>>> print y # a statement (in 2.x)
2
但是请注意,在所有语言中,除了真正的"纯"语言,表达式也可以"做一些事情"(更正式地说:有副作用)。
@德尔南:你能举个例子吗(好奇)?我不知道。
@A:简单的例子:sys.stdout.write('see?
')(在3.x中更简单,其中print是一个函数,因此可以作为表达式的一部分调用)。当然,除非你对"做些什么"有一个非常特殊的定义。
同样,以东十一〔七〕号。实际上,大多数函数调用。
y=x+1不是表达式,而是语句。尝试eval("y=x+1"),就会出现错误。
@用户225312,你说一个statement做了点什么。那么一个空语句做什么呢?
y=x+1是表达式语句
语句表示操作或命令,例如打印语句、分配语句。
1print 'hello', x = 1
表达式是变量、操作和值的组合,生成结果值。
15 * 5 # yields 25
最后,表达式语句
1print 5*5
表达式是返回值的语句。因此,如果它可以出现在赋值的右侧,或者作为方法调用的参数,那么它就是一个表达式。
根据上下文的不同,一些代码可以同时是表达式或语句。当二者模棱两可时,语言可能有区分它们的方法。
这个问题专门问关于python的问题,所以尽管这个解释对javascript来说是广泛的,而且非常好,但对于这个问题来说,它是一个主题之外的问题。
@马丁,我会保留我的解释,但删掉我的例子,这样你每次投反对票都不会偏离主题。
甜美!如果把你以前的文章放在相关的文章里,这是值得的,这是一个彻底的解释。:)
表达式是一种东西,而语句是一种东西。表达式也是语句,但它必须有返回。
1
2>>> 2 * 2 #expression
>>> print(2 * 2) #statement
PS:解释器总是打印出所有表达式的值。
在我看来,语句是一个带有空值的表达式
一个表达式是可以减少为一个值的东西,例如"1+3"或"foo = 1+3"。
很容易检查:
1print foo = 1+3
如果它不起作用,它就是一个声明,如果起作用,它就是一个表达式。
另一种说法可能是:
1class Foo(Bar): pass
因为它不能减少到一个值。
正如执行第一个示例所示,在python中,赋值不是一个表达式(实际上不是这样的,即允许-a = b = expr,作为一种特殊情况)。在语言中,从C中获得更多的灵感。
class Foo(bar):是一个语句的开头,不是一个完整的语句。
foo = 1+3不是一个表达式。它是一个陈述(精确地说是一个任务)。不过,1+3部分是一个表达式。
我的公式非常非常精确:"如果它不起作用,它就是一个陈述,如果它起作用,它就是一个表达。"执行它,你就会得到你的答案。
声明:
语句是执行某项操作或命令。例如:否则,循环等
1
2val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")
表达式:
表达式是值、运算符和文本的组合,可以产生一些东西。
1val a: Int = 5 + 5 #yields 10
这是现有答案的副本:stackoverflow.com/questions/4728073/&hellip;。
也许是重复的,但它分享了我对上述问题的看法。无违法行为
表达:
表达式由objects和operators组合而成。
表达式具有值,该值具有类型。
简单表达式的语法:。
2.0 + 3是一个计算为5.0的表达式,它有一个与之相关联的float类型。
声明
语句由表达式组成。它可以跨越多条线。
语句包含关键字。
表达式不包含关键字。
print"hello"是语句,因为print是关键字。
"hello"是一个表达式,但列表压缩是反对的。
以下是表达式语句,如果不理解列表,则为真:
1(x*2 for x in range(10))
这很大程度上取决于你对"关键字"的定义。x = 1是一个非常好的语句,但不包含关键字。
我认为表达式包含运算符+操作数和保存操作结果的对象…例如
1var sum = a + b;
但语句只是一行代码(可能是表达式)或一块代码…例如
1
2
3
4
5
6fun printHello(name: String?): Unit {
if (name != null)
println("Hello ${name}")
else
println("Hi there!")
// `return Unit` or `return` is optional
}
python调用表达式"expression statements",因此问题可能没有完全形成。
语句包含在python中可以执行的几乎所有操作:计算值、分配值、删除变量、打印值、从函数返回、引发异常等。完整的列表如下:http://docs.python.org/reference/simplestmts.html#
表达式语句仅限于调用函数(例如,math.cos(theta)"、运算符(例如,"2+3")等,以生成值。
不,python不调用表达式"expression statements"。python调用只包含一个表达式"expression语句"的语句。
…不仅如此。