在Python中,表达式和语句之间有什么区别?
答案 0 :(得分:211)
Expressions仅包含identifiers,literals和operators,其中运算符包含算术运算符和布尔运算符,函数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中的表达式由Atoms,Primaries和Operators的语法合法组合构成。
Python expressions from Wikipedia
表达式示例:
Literals以及与Operators和built-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 Statements和Compound Statements。
“陈述做某事”和“表达产生价值”的区别可能会变得模糊:
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()
作为表达式,但这可能是一个错误...... 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)
答案 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值的语句。 当您键入一条语句时,解释器将执行它,这意味着它将执行任何操作 声明说。通常,语句没有值。
答案 9 :(得分:0)
语句包含关键字。
表达式不包含关键字。
print "hello"
是声明,因为print
是关键字。
"hello"
是一个表达式,但列表压缩是针对此的。
以下是表达式语句,如果没有列表解析,则为真:
(x*2 for x in range(10))
答案 10 :(得分:0)
<强>表达式:强>
objects
和operators
来形成表达式。<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
}