Python中的expression式和语句有什么区别?
在Python中,expression式和语句有什么区别?
expression式只包含标识符 , 文字和运算符 ,其中运算符包括算术和布尔运算符,函数调用operator ()
和订阅运算符 []
等,可以简化为某种“值”,可以是任何Python对象。 例子:
3 + 5 map(lambda x: x*x, range(10)) [ax for a in some_iterable] yield 7
另一方面,语句(参见1,2 )是可以组成一行(或几行)Python代码的所有东西。 请注意,expression式也是语句。 例子:
# all the above expressions print 42 if x: do_y() return a = 7
expression – 从我的词典:
expression式: math共同expression数量的符号集合:圆周的expression式为2πr。
总的来说: expression式至less产生一个值。
在Python中,expression式在Python语言参考中有广泛的涵盖。一般来说,Python中的expression式由Atom , Primaries和Operators的语法合法组合构成。
来自Wikipedia的Pythonexpression式
expression式的例子:
文字和语法正确的与运算符和内置函数的组合或用户编写函数的调用:
>>> 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
来自维基百科的声明 :
在计算机编程中,语句可以被认为是命令式编程语言中最小的独立元素。 程序由一个或多个语句序列组成。 一个声明将有内部组件(例如,expression式)。
来自维基百科的Python语句
总体而言: 声明做某事 ,通常由expression式(或其他陈述)组成,
Python语言参考涵盖了广泛的简单语句和复合语句 。
然而,“语句做某事”和“expression式产生价值”的区别可能会变得模糊不清:
- 列表理解被认为是“expression式”,但他们有循环构造,因此也做一些事情。
-
if
通常是一个语句,例如,if x<0: x=0
但是x=0 if x<0 else 1
也是expression式,那么也可以有一个条件expression式,如x=0 if x<0 else 1
。 在其他语言中,比如C,这种forms被称为像这样的运算符:x=x<0?0:1;
- 你可以写一个函数来写你自己的expression式。
def func(a): return a*a
是一个expression式,但是在定义时由语句组成。 - 返回
None
的expression式是Python中的一个过程:def proc(): pass
语法上,可以使用proc()
作为expression式,但这可能是一个bug … - Python比Cexpression式和语句之间的差异要严格一些。 在C中,任何expression式都是法律声明。 你可以有
func(x=2);
这是expression还是陈述? ( expression式用作带有副作用的语句 )func(x=2)
forms在Python中是非法的(或者至less它具有不同的含义func(a=3)
将命名的参数a
为3)
虽然这与Python无关:
expression
评估为一个值。 一个statement
做一些事情。
>>> x = 1 >>> y = x + 1 # an expression >>> print y # a statement (in 2.x) 2
语句表示一个动作或命令,例如打印语句,赋值语句。
print 'hello', x = 1
expression式是variables,操作和值的组合,产生结果值。
5 * 5 # yields 25
最后,expression陈述
print 5*5
expression式可以简化为一个值,例如"1+3"
或"foo = 1+3"
。
很容易检查:
print foo = 1+3
如果它不起作用,这是一个声明,如果它是,它是一个expression式。
另一种说法可能是:
class Foo(Bar): pass
因为它不能降到一个价值。
Python调用expression式“expression式语句”,所以问题可能没有完全形成。
一个语句包含了几乎所有你可以在Python中做的事情:计算一个值,赋值,删除一个variables,打印一个值,从一个函数返回,引发一个exception等等。完整的列表在这里: http:// docs.python.org/reference/simple_stmts.html#
expression式声明仅限于调用函数(例如,math.cos(theta)“),运算符(例如”2 + 3“)等来产生值。
一个声明包含一个关键字。
expression式不包含关键字。
print "hello"
是声明,因为print
是一个关键字。
"hello"
是一个expression式,但列表压缩是与此相反的。
以下是一个expression式语句,如果没有列表理解,它是真实的:
(x*2 for x in range(10))
我认为一个expression式包含操作符+操作数和保存操作结果的对象…例如
var sum = a + b;
但是一个声明只是一行代码(可能是一个expression式)或代码块…例如
fun printHello(name: String?): Unit { if (name != null) println("Hello ${name}") else println("Hi there!") // `return Unit` or `return` is optional
}
expression式:
- expression式通过组合
objects
和operators
来形成。 - expression式有一个值,它有一个types。
- 简单expression式的语法:
<object><operator><object>
2.0 + 3
是一个评价为5.0
的expression式,并且具有与之相关的typesfloat
。
声明
语句由expression式组成。 它可以跨越多行。
一个expression就是某种东西,而一个陈述则是做某事的
一个expression也是一个陈述,但它必须有一个回报。
>>> 2 * 2 #expression >>> print(2 * 2) #statement
PS:解释器总是打印出所有expression式的值。