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

2024-12-31 08:37:00
admin
原创
197
摘要:问题描述:在 Python 中,表达式和语句有什么区别?解决方案 1:表达式只包含标识符、文字和运算符,其中运算符包括算术运算符、布尔运算符、函数调用运算 ()符、下标 []运算符等,并且可以简化为某种“值”,该值可以是任何 Python 对象。示例:3 + 5 map(lambda x: x*x, rang...

问题描述:

在 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:

  1. 表达式是返回值的语句。因此,如果它可以出现在赋值语句的右侧,或者作为方法调用的参数,那么它就是表达式。

  2. 根据上下文,某些代码既可以是表达式,也可以是语句。当它们有歧义时,语言可能会有区分两者的方法。

解决方案 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 语句可改变对特定名称的赋值操作的范围。它们分别由globalnonlocal关键字标识。

  • 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()”内置函数。

  1. 作为动作或命令的语句不能直接打印。

  2. 表达式“产生”的值可以被打印。

例子:

def sum(a, b):
   return a+b

print(sum(2,3))

所以输出将是 5,因此我们可以说函数确实是表达式。

理解了基础知识后,深入研究主题就变得更容易。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用