Python 中的表达式和语句有什么区别?
- 2024-12-31 08:37:00
- admin 原创
- 197
问题描述:
在 Python 中,表达式和语句有什么区别?
解决方案 1:
表达式只包含标识符、文字和运算符,其中运算符包括算术运算符、布尔运算符、函数调用运算 ()
符、下标 []
运算符等,并且可以简化为某种“值”,该值可以是任何 Python 对象。示例:
3 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7
声明(见1、2 ) 则相反,是可以组成一行(或几行) Python 代码的所有内容。请注意,表达式也是语句。示例:
# all the above expressions
print 42
if x: do_y()
return
a = 7
解决方案 2:
虽然这与 Python 无关:
Anexpression
求值。Astatement
执行某事。
>>> x + 2 # an expression
>>> x = 1 # a statement
>>> y = x + 1 # a statement
>>> print y # a statement (in 2.x)
2
解决方案 3:
表达——来自新牛津美语词典:
表达式:数学中共同表达一个数量的符号集合:圆的周长的表达式为 2πr。
总体来说:表达式至少产生一个值。
在 Python 中,表达式在Python 语言参考中有广泛的介绍。一般来说,Python 中的表达式由语法上合法的原子、基本类型和运算符组合组成。
来自 Wikipedia 的 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
维基百科的声明:
在计算机编程中,语句可以被认为是命令式编程语言中最小的独立元素。程序由一个或多个语句序列组成。语句将具有内部组件(例如表达式)。
来自 Wikipedia 的 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 在表达式和语句之间的区别方面比 C 更严格一些。在 C 中,任何表达式都是合法语句。你可以问
func(x=2);
这是表达式还是语句?(答案:表达式用作具有副作用的语句。x=2
)Python 中函数调用内部的赋值语句仅在调用中将func(x=2)
命名参数设置为 2 ,并且比 C 示例更受限制。a
`func`
解决方案 4:
表达式是可以简化为值的东西。让我们通过以下示例来弄清楚什么是什么:"1+3"
和"foo = 1+3"
。
检查起来很简单:
print(foo = 1+3)
如果不起作用,则它是一个语句;如果起作用,则它是一个表达式。试试看!
另一个表述可能是:
class Foo(Bar): pass
因为它不能被简化为一个值。
解决方案 5:
语句表示动作或命令,例如打印语句、赋值语句。
print 'hello', x = 1
表达式是变量、运算和值的组合,产生结果值。
5 * 5 # yields 25
最后,表达式语句
print 5*5
解决方案 6:
表达式是做某事的,而语句是做某事的。
表达式也是语句,但它必须有返回值。
>>> 2 * 2 #expression
>>> print(2 * 2) #statement
PS:解释器总是打印出所有表达式的值。
解决方案 7:
表达式是返回值的语句。因此,如果它可以出现在赋值语句的右侧,或者作为方法调用的参数,那么它就是表达式。
根据上下文,某些代码既可以是表达式,也可以是语句。当它们有歧义时,语言可能会有区分两者的方法。
解决方案 8:
参考
表达式和语句
2.3 表达式和语句 - Allen B. Downey的 thinkpython2
2.10. 语句和表达式 - 如何像计算机科学家一样思考(作者:Paul Resnick 和 Brad Miller)
表达式是值、变量和运算符的组合。值本身被视为表达式,变量也是如此,因此以下都是合法的表达式:
>>> 42
42
>>> n
17
>>> n + 25
42
当您在提示符下键入表达式时,解释器会对其进行求值,这意味着它会找到表达式的值。在此示例中,n 的值为 17,n + 25 的值为 42。
语句是具有效果的代码单元,例如创建变量或显示值。
>>> n = 17
>>> print(n)
第一行是赋值语句,为 n 赋值。第二行是打印语句,显示 n 的值。当你输入一个语句时,解释器会执行它,这意味着它会执行语句所说的一切。一般来说,语句没有值。
解决方案 9:
陈述:
语句是执行某项操作或命令。例如:If-Else、循环等
val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")
表达:
表达式是值、运算符和文字的组合,可以产生某些结果。
val a: Int = 5 + 5 #yields 10
解决方案 10:
表达式总是会计算出一个值,而语句则不会。
例如
变量声明和赋值是语句,因为它们不返回值
const list = [1,2,3];
这里我们有两个操作数 - 左边是变量“sum”,右边是表达式。整个操作数是一个语句,但右边的部分是一个表达式,因为这段代码返回一个值。
const sum = list.reduce((a, b)=> a+ b, 0);
函数调用、算术和布尔运算都是表达式的很好的例子。
表达式通常是语句的一部分。
两者之间的区别通常需要表明我们是否需要一段代码返回一个值。
解决方案 11:
表达式转化为值。
一个语句使用一个值来产生一个结果*。
*其中包括空值,如:print()
或pop()
。
**这个结果可以是任何改变某些事物的动作;例如改变内存(x = 1)或改变屏幕上的某些内容(print(“x”))。
几点说明:
由于语句可以返回结果,因此它可以成为表达式的一部分。
一个表达式可以是另一个表达式的一部分。
解决方案 12:
之前的语句可以改变我们的 Python 程序的状态:创建或更新变量、定义函数等。
表达式只返回一些值,不能改变函数中的全局状态或局部状态。
但现在我们知道了:=
,它是一个外星人!
解决方案 13:
表达式:
objects
表达式由和组合而成operators
。表达式有一个值,该值有一个类型。
简单表达式的语法:
<object><operator><object>
2.0 + 3
是一个计算结果为且具有关联5.0
类型的表达式。float
声明
语句由表达式组成。它可以跨越多行。
解决方案 14:
一个语句包含一个关键字。
表达式不包含关键字。
print "hello"
是语句,因为print
是一个关键字。
"hello"
是一个表达式,但是列表压缩与此相反。
以下是一个表达式语句,无需列表推导即可得出正确结论:
(x*2 for x in range(10))
解决方案 15:
表达式被求值以产生一个值,而语句被执行以完成某个动作或任务。
解决方案 16:
表达式和语句都是 Python 语法中的句法结构。
可以对表达式进行求值以产生一个值。
语句是 Python 程序的独立部分(它只是按顺序执行的 0 个或多个语句的序列)。每种语句都提供一组不同的语义来定义程序将执行的操作。
语句通常(但并非总是)由表达式构成,并以自己独特的方式使用表达式的值。通常,有一些关键字或符号可用于识别每种特定类型的语句。
各种语句的详尽列表(截至 Python 3.11)。
表达式语句计算表达式的值并丢弃结果。(可以使用任何表达式;表达式语句没有其他显著特征。)
赋值语句计算表达式的值并将其值赋给一个或多个目标。它通过
=
在函数调用上下文之外的使用来识别。断言语句评估表达式,如果表达式的值为假,则引发异常。它由
assert
关键字标识。pass 语句不执行任何操作:它的工作是向解析器提供一个语句,而解析器需要该语句,但没有其他语句合适。它由关键字标识(且仅由关键字组成)
pass
。del 语句从当前范围移除绑定。不计算任何表达式;绑定必须是名称、索引名称或点名称。它由关键字标识
del
。return 语句将控制权(以及可选表达式的值,默认为
None
)返回给函数的调用者。它由return
关键字 标识。Yield 语句将可选表达式(默认为 )的值返回
None
给生成器的使用者。它由yield
关键字 标识。 (yield
也用于 Yield 表达式;上下文可以清楚地说明何时指的是语句或表达式。)raise 语句计算表达式的值以产生异常并绕过正常的执行顺序。它由关键字标识
raise
。break 语句终止当前活动循环。它由关键字标识(且仅由
break
关键字组成)。continue 语句跳过当前活动循环的其余部分并尝试开始新迭代。它由关键字标识(且仅由
continue
关键字组成)。import 语句可能会定义一个新
module
对象,并将当前作用域中的一个或多个名称绑定到module
模块中定义的一个或一个值。(与语句一样class
,有各种钩子可用于覆盖 import 语句执行期间发生的确切情况。)有几种形式,所有形式都共享import
关键字。global 和 nonlocal 语句可改变对特定名称的赋值操作的范围。它们分别由
global
和nonlocal
关键字标识。if 语句评估布尔表达式以选择接下来要执行的一组语句。它由
if
关键字标识。while 语句计算布尔表达式的值,以确定是否执行其主体,重复该过程直到表达式变为假。它由
while
关键字` 标识。for 循环计算表达式以生成迭代器,它使用该迭代器执行一些名称绑定并重复执行一组具有这些绑定的语句。它由关键字标识
for
(生成器表达式和推导式也共享该关键字,但上下文可以清楚地说明哪个是哪个)。try 语句执行一组语句并捕获这些语句可能引发的任何异常。它由关键字标识
try
。with 语句对表达式求值以生成上下文管理器,该上下文管理器提供一对函数,可在执行一组语句之前和之后调用。它由
with
关键字标识。函数定义会产生一个可调用对象,该对象包装了一个或多个在调用该对象时要执行的语句。它由
def
关键字标识。类语句评估一组语句,以生成一组绑定,用作新类型的属性。(与 import 语句一样,有各种钩子可以覆盖类语句执行期间发生的确切情况。)它由关键字标识
class
。协程由各种函数、for 和 with 语句生成,使用
async
关键字来将其与同步对应项区分开来。
解决方案 17:
语句由一个或多个表达式组成。表达式是对变量或值的任何引用,或一组变量和值与运算符的组合。
例如:
a = b * 2;
这条语句中有四个表达式:
2
是一个文字值表达式。b
是一个变量表达式,表示检索其当前值。b * 2
是一个算术表达式,表示进行乘法运算。a = b * 2
是赋值表达式,意思是将表达式的结果赋值b * 2
给变量a
。
独立的一般表达式也称为表达式语句,例如:
b * 2;
这种表达式语句不是很常见或有用,因为一般来说,它不会对程序的运行产生任何影响,它会检索的值b
并将其乘以2
,但不会对该结果执行任何操作。
更常见的表达式语句是调用表达式语句,因为整个语句就是函数调用表达式本身:
print(a)
参考:你不知道的 JS - Up & Going
解决方案 18:
Python 将表达式称为“表达式语句”,因此这个问题可能不完全成形。
语句几乎包含 Python 中可以执行的所有操作:计算值、赋值、删除变量、打印值、从函数返回、引发异常等。完整列表在此处:http ://docs.python.org/reference/simple_stmts.html#
表达式语句仅限于调用函数(例如,math.cos(theta)”)、运算符(例如,“2 + 3”)等来产生值。
解决方案 19:
对于刚接触 Python 的人来说,我想说理解和确定某个东西是表达式还是语句的最简单方法是尝试使用“print()”内置函数。
作为动作或命令的语句不能直接打印。
表达式“产生”的值可以被打印。
例子:
def sum(a, b):
return a+b
print(sum(2,3))
所以输出将是 5,因此我们可以说函数确实是表达式。
理解了基础知识后,深入研究主题就变得更容易。