Python中的表达式和语句有什么区别?

was*_*ans 291 python expression

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

Sve*_*ach 225

表达式只包含标识符,文字运算符,其中运算符包括算术运算符和布尔运算符,函数调用运算符 ()订阅运算符 []类似,并且可以简化为某种"值",可以是任何Python对象.例子:

3 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7
Run Code Online (Sandbox Code Playgroud)

声明(见 1,另一方面,2)可以构成Python代码的一行(或几行).请注意,表达式也是语句.例子:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Run Code Online (Sandbox Code Playgroud)

  • @bismigalis:每个有效的Python表达式都可以用作语句(称为["表达式语句"](http://docs.python.org/2/reference/simple_stmts.html#expression-statements)).从这个意义上说,表达式*是*语句. (53认同)
  • 表达式是_parts_ of statements (13认同)
  • 是的,你是对的,我没有考虑这个案子. (8认同)
  • @WillTaylor 产生值的所有内容都是一个表达式,即您可以在作业的手写端编写的所有内容。由于“a = yield 7”有效,因此“yield 7”是一个表达式。很久以前,“yield”作为一个语句被引入,但它在[PEP 342](https://www.python.org/dev/peps/pep-0342/)中被推广为一个表达式。 (6认同)
  • 表达式还可以包括函数调用(包括用于对象实例化的调用类)。从技术上讲,这些是“标识符”,就像在 = 语句中绑定到值的名称一样……即使绑定是通过 'def' 或 'class' 关键字进行的。但是,对于这个答案,我会单独说明函数调用以明确说明。 (2认同)
  • @乔治很公平。:) 表达式语句即使在 REPL 之外也非常有用——使用函数调用表达式作为表达式语句是很常见的,例如 `print("Hello world!")` 或 `my_list.append(42)`。 (2认同)

daw*_*awg 106

表达 - 来自我的字典:

表达式:数学联合表达数量的符号集合:圆周长的表达式为2πr.

总的来说:表达式至少产生一个值.

在Python中,Python语言参考中广泛涉及表达式.通常,Python中的表达式由Atoms,PrimariesOperators的语法合法组合组成.

来自维基百科的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
Run Code Online (Sandbox Code Playgroud)

来自维基百科的声明:

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

来自维基百科的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比表达式和Statement之间的差异更严格.在C中,任何表达式都是合法的陈述.你可以拥有func(x=2);表达式或声明吗?(答案:表达式用作带有副作用的语句.)表单func(x=2)在Python中是非法的(或者至少它有不同的含义func(a=3)将命名参数设置a为3)

  • “来自我的词典”是指您的个人意见还是您拥有的词典(例如牛津词典)?谢谢 (2认同)
  • @Talespin_Kit:*...您的个人观点或您拥有的词典(例如牛津词典)?* 好问题。我在 Mac 上使用了基于《新牛津美国词典》的 Apple 词典应用程序。 (2认同)

use*_*312 67

虽然这与Python无关:

一个expression评估的值.A statement做了一件事.

>>> x = 1
>>> y = x + 1     # an expression
>>> print y       # a statement (in 2.x)
2
Run Code Online (Sandbox Code Playgroud)

  • y = x + 1不是表达式而是声明.尝试eval("y = x + 1"),你就会出错. (12认同)
  • 但请注意,除了真正的"纯粹"语言外,所有语言中的表达式都可以"做某事"(更正式地说:有副作用). (3认同)
  • 同样,`somelist.append(123)`.大多数函数调用,真的. (3认同)
  • y = x +1是表达式语句 (3认同)
  • @SteveFreed 陈述不是由表达式组成的吗?如果是这样,说“表达式语句”就相当多余了。 (2认同)

Emm*_*osu 11

语句表示动作或命令,例如打印语句,赋值语句.

print 'hello', x = 1
Run Code Online (Sandbox Code Playgroud)

表达式是产生结果值的变量,操作和值的组合.

5 * 5 # yields 25
Run Code Online (Sandbox Code Playgroud)

最后,表达陈述

print 5*5
Run Code Online (Sandbox Code Playgroud)


don*_*ang 6

表达式是某物,而语句则是做某事。
表达式也是一个语句,但它必须有一个返回值。

>>> 2 * 2???????  ?#expression
>>> print(2 * 2)?????#statement
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*gin 6

  1. 表达式是返回值的语句。因此,如果它可以出现在赋值的右侧,或者作为方法调用的参数,则它是一个表达式。
  2. 根据上下文,某些代码可以是表达式也可以是语句。该语言可能具有在歧义时区分两者的方法。


bl3*_*0de 6

参考

\n

表达式和陈述

\n

2.3 表达式和语句 - thinkpython2 作者:Allen B. Downey

\n

2.10. 陈述和表达 - 如何像计算机科学家一样思考 作者:Paul Resnick 和 Brad Miller

\n
\n

表达式是值、变量和运算符组合。值本身被视为表达式,变量也是如此,因此以下都是合法的表达式:

\n
>>> 42\n42\n>>> n\n17\n>>> n + 25\n42\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

当您在提示符下键入表达式时,解释器会对其求值,这意味着\n会找到表达式的值。在此示例中,n 的值为 17,n + 25 的值为 42。

\n
\n
\n

语句是具有效果的代码单元,例如创建变量或显示\n值。

\n
>>> n = 17\n>>> print(n)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

第一行是一个赋值语句,为 n 赋值。第二行是一个 print 语句,显示 n 的值。\n当您键入一条语句时,解释器会执行该语句,这意味着它会执行该语句所说的任何操作。一般来说,语句 don\xe2\x80\x99t 都有值。

\n
\n


Fla*_*ius 5

表达式是可以简化为值的内容,例如"1+3""foo = 1+3"

很容易检查:

print foo = 1+3
Run Code Online (Sandbox Code Playgroud)

如果不起作用,则为语句;如果不起作用,则为表达式。

另一种说法可能是:

class Foo(Bar): pass
Run Code Online (Sandbox Code Playgroud)

因为它不能减少为一个值。

  • `foo = 1+3` 不是一个表达式。它是一个语句(准确地说是一个赋值)。不过“1+3”部分是一个表达式。 (2认同)
  • 我的表述非常非常精确:“如果它不起作用,它就是一个陈述,如果它起作用,它就是一个表达式。”。执行它,你就会得到答案。 (2认同)

小智 5

陈述:

语句是执行某事的动作或命令。例如:If-Else、Loops..等

val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")
Run Code Online (Sandbox Code Playgroud)

表达:

表达式是值、运算符和文字的组合,可以产生一些东西。

val a: Int = 5 + 5 #yields 10
Run Code Online (Sandbox Code Playgroud)


小智 5

表达式总是求值为一个值,而语句则不然。

例如

变量声明和赋值是语句,因为它们不返回值

const list = [1,2,3];
Run Code Online (Sandbox Code Playgroud)

这里我们有两个操作数——左边的变量“sum”和右边的表达式。整个事情是一个语句,但右边的位是一个表达式,因为那段代码返回一个值。

const sum = list.reduce((a, b)=> a+ b, 0);  
Run Code Online (Sandbox Code Playgroud)

函数调用、算术和布尔运算是表达式的好例子。

表达式通常是语句的一部分。

两者之间的区别通常需要表明我们是否需要一段代码才能返回一个值。