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

时间:2011-01-18 19:19:58

标签: python expression

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

16 个答案:

答案 0 :(得分:211)

Expressions仅包含identifiersliteralsoperators,其中运算符包含算术运算符和布尔运算符,函数call operator () { {3}} []和类似的,可以简化为某种“值”,可以是任何Python对象。例子:

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

另一方面,语句(请参阅subscription operator 1 )是构成Python代码行(或几行)的所有内容。请注意,表达式也是语句。例子:

# all the above expressions
print 42
if x: do_y()
return
a = 7

答案 1 :(得分:101)

表达 - 来自我的词典:

  

表达:数学一个集合   共同表达的符号   数量:表达式   圆周是2πr。

总体而言:表达式至少产生一个值。

在Python中,Python Language Reference中广泛涵盖了表达式。通常,Python中的表达式由AtomsPrimariesOperators的语法合法组合构成。

Python expressions from Wikipedia

表达式示例:

Literals以及与Operatorsbuilt-in functions语法正确的组合或用户编写函数的调用:

>>> 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 statements from Wikipedia

粗略概括:语句做某事并且通常由表达式(或其他语句)组成

Python语言参考涵盖了Simple StatementsCompound Statements

“陈述做某事”和“表达产生价值”的区别可能会变得模糊:

  • List Comprehensions被认为是“表达式”,但它们具有循环结构,因此也有“做某事”。
  • if通常是一个声明,例如if x<0: x=0,但您也可以使用conditional expression 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);这是表达式还是声明? (Answer: Expression used as a Statement with a side-effect.func(x=2)形式在Python中是非法的(或者至少它具有不同的含义func(a=3)将命名参数a设置为3)

答案 2 :(得分:61)

虽然这与Python无关:

expression评估值。 statement做了一些事情。

>>> x = 1
>>> y = x + 1     # an expression
>>> print y       # a statement (in 2.x)
2

答案 3 :(得分:9)

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

print 'hello', x = 1

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

5 * 5 # yields 25

最后,表达式语句

print 5*5

答案 4 :(得分:4)

  1. 表达式是一个返回值的语句。因此,如果它可以出现在赋值的右侧,或者作为方法调用的参数,则它是一个表达式。
  2. 某些代码可以是表达式或语句,具体取决于上下文。当语言含糊不清时,该语言可能有区分这两种语言。

答案 5 :(得分:3)

表达式可以缩减为某个值,例如"1+3""foo = 1+3"

很容易检查:

print foo = 1+3

如果它不起作用,那就是一个声明,如果是的话,它就是一个表达式。

另一种说法可能是:

class Foo(Bar): pass

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

答案 6 :(得分:3)

表达式是某种东西,而语句可以做某事。
表达式也是一个陈述,但它必须有一个回报。

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

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

答案 7 :(得分:3)

表达式总是求值,而语句则不会。

例如

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

const list = [1,2,3];

在这里,我们有两个操作数-左侧的变量'sum'和右侧的表达式。 整个过程都是一个语句,但是右边的是表达式,因为那段代码返回一个值。

const sum = list.reduce((a, b)=> a+ b, 0);  

函数调用,算术和布尔运算是表达式的很好示例。

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

通常需要区分两者,以表明我们是否需要一些代码才能返回值。

答案 8 :(得分:1)

表达式是值,变量和运算符的组合。本身的价值就是 被认为是表达式,因此也是变量,因此以下是所有合法表达式:

>>> 42
42
>>> n
17
>>> n + 25
42

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


声明是有效的代码单元,例如创建变量或显示 值。

>>> n = 17
>>> print(n)

第一行是赋值语句,将值赋给n。第二行是印刷品 显示n值的语句。 当您键入一条语句时,解释器将执行它,这意味着它将执行任何操作 声明说。通常,语句没有值。

This can be useful - thinkpython2 by Allen B. Downey

答案 9 :(得分:0)

语句包含关键字。

表达式不包含关键字。

print "hello"是声明,因为print是关键字。

"hello"是一个表达式,但列表压缩是针对此的。

以下是表达式语句,如果没有列表解析,则为真:

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

答案 10 :(得分:0)

<强>表达式:

  • 通过合并objectsoperators来形成表达式。
  • 表达式具有值,该值具有类型。
  • 简单表达式的语法:<object><operator><object>

2.0 + 3是一个表达式,其评估结果为5.0,并且其类型为float

<强>语句

陈述由表达式组成。它可以跨越多行。

答案 11 :(得分:0)

声明:

语句是执行某项操作的动作或命令。例如:If-Else,Loops..etc

val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")

表达式:

表达式是值,运算符和文字的组合,会产生某些结果。

val a: Int = 5 + 5 #yields 10

答案 12 :(得分:0)

有些语句可能会更改我们Python程序的状态:创建或更新变量,定义函数等。

表达式仅返回一些值,无法更改函数中的全局状态或局部状态。

但是现在我们有了:=,它是外星人!

答案 13 :(得分:0)

表达式会转换为值。

声明使用值*来产生结果**。


*其中包含一个空值,例如:pop()"use strict;" console.log(splitTextIntoWordGroups("Lorem ipsum dolor sit amet consectetur adipiscing elit sed doeiusmod tempor incididunt ut Duis aute irure dolor in reprehenderit in esse cillum dolor eu fugia")); function splitTextIntoWordGroups(text) { const words = text.split(' '); const wordGroups = []; while(true) { if(next3WordsAreAllShorterThan6Chars(words)) { wordGroups.push(moveNext3WordsToWordGroup(words)); } else if(next2WordsAreAllShorterThan6CharsAndSubsequentWordIsLongerThan6Chars(words)) { wordGroups.push(moveNext2WordsToWordGroup(words)); } else if(nextWordIsLongerOrEqualThan6CharsAndSubsequentWordIsLongerOrEqualThan6Chars(words)) { wordGroups.push(moveNextWordToWordGroup(words)); } else if(nextWordIsLongerOrEqualThan6CharsAndSubsequentWordIsShorterThan6Chars(words)) { wordGroups.push(moveNext2WordsToWordGroup(words)); } else if(nextWordIsShorterThan6CharsAndSubsequentWordIsLongerOrEqualThan6Chars(words)) { wordGroups.push(moveNext2WordsToWordGroup(words)); } else { let remainingWordGroup = moveRemainingWordsToWordGroup(words); if(remainingWordGroup) { wordGroups.push(remainingWordGroup); } break; } } return wordGroups; } function next3WordsAreAllShorterThan6Chars(words) { if(words.length < 3) return false; if(words[0].length < 6 && words[1].length < 6 && words[2].length < 6) return true; return false; } function next2WordsAreAllShorterThan6CharsAndSubsequentWordIsLongerThan6Chars(words) { if(words.length < 3) return false; if(words[0].length < 6 && words[1].length < 6 && words[2].length > 6) return true; return false; } function nextWordIsLongerOrEqualThan6CharsAndSubsequentWordIsLongerOrEqualThan6Chars(words) { if(words.length < 2) return false; if(words[0].length >= 6 && words[1].length >= 6) return true; return false; } function nextWordIsLongerOrEqualThan6CharsAndSubsequentWordIsShorterThan6Chars(words) { if(words.length < 2) return false; if(words[0].length >= 6 && words[1].length < 6) return true; return false; } function nextWordIsShorterThan6CharsAndSubsequentWordIsLongerOrEqualThan6Chars(words) { if(words.length < 2) return false; if(words[0].length < 6 && words[1].length >= 6) return true; return false; } function moveNext3WordsToWordGroup(words, results) { return moveNextNWordsToWordGroup(words, 3); } function moveNext2WordsToWordGroup(words, results) { return moveNextNWordsToWordGroup(words, 2); } function moveNextWordToWordGroup(words, results) { return moveNextNWordsToWordGroup(words, 1); } function moveNextNWordsToWordGroup(words, n) { wordGroup = []; for(let i=0; i < n; i++) { wordGroup.push(words.shift()); } return wordGroup.join(' '); } function moveRemainingWordsToWordGroup(words) { if(words.length > 0) { wordGroup = []; wordGroup.push(...words); return wordGroup.join(' '); } }

**此结果可以是任何更改某些内容的操作;例如更改内存(x = 1)或更改屏幕上的某些内容(print(“ x”))。


一些注意事项:

  • 由于语句可以返回结果,因此它可以成为表达式的一部分。
  • 一个表达式可以是另一个表达式的一部分。

答案 14 :(得分:-1)

Python调用表达式“表达式语句”,因此问题可能没有完全形成。

语句包含几乎可以在Python中执行的任何操作:计算值,分配值,删除变量,打印值,从函数返回,引发异常等。完整列表位于:{ {3}}

表达式语句仅限于调用函数(例如, math.cos(theta)“),运算符(例如”2 + 3“)等产生一个值。

答案 15 :(得分:-1)

我认为表达式包含运算符+操作数以及保存操作结果的对象...例如

var sum = a + b;

但声明只是代码的一行(可能是表达式)或代码块......例如。

fun printHello(name: String?): Unit {
if (name != null)
    println("Hello ${name}")
else
    println("Hi there!")
// `return Unit` or `return` is optional

}