因为在Python语言中,表达式被定义为"求值为单个值的值、变量和运算符的组合".

如果我们取"abc"+5这样的东西.虽然它是值、变量和运算符的组合,但它的计算结果不是单个值,它会给出错误,因为您不能将字符串与整数相加.

那么,它会被认为是为什么或为什么不是一种表达吗?

推荐答案

是的,根据任何合理的定义.我将从你的定义和我将使用的定义来论证这一点.

根据你的定义,

在Python语言中,表达式被定义为"求值为单个值的值、变量和运算符的组合".

我不同意这一点,因为它几乎排除了所有东西.您的异常问题并不是该示例所特有的.a + b可以是一个表达式,因为a可能是其__add__刚刚抛出的类.所以,更准确地说,我会说

表达式是Python中的一个术语,其计算结果为单个值或引发异常

这就解决了你的问题.

但我仍然不会使用这个定义.看,当我们谈论表达式时,我们通常谈论的是语法和解析,而您的定义陷入了运行库的语义中.通常,我们对"表达"的定义是归纳的.也就是说,我们从几个基本表达式开始(这不是一个完整的列表,只是一些示例):

  • 每个整型文字都是一个表达式.
  • 特殊常量None是一个表达式.
  • 用引号括起来的字符串文字是一个表达式.

然后,我们通过条件句归纳地建立复合表达式.

  • 如果ab是任意表达式,那么a + b也是任意表达式.
  • 如果fa1, a2, ... an是表达式,那么f(a1, a2, ... an)也是.
  • 如果a1, a2, ... an是表达式,那么[a1, a2, ... an]也是.

这样的定义最终在很大程度上是技术性的,确切的细节可以在Python grammar辆车上公开获得.但再说一次,这是really个技术知识,除非您正在攻克Python编译器本身,否则您并不真正需要了解它.

Python相关问答推荐

提取两行之间的标题的常规表达

线性模型PanelOLS和statmodels OLS之间的区别

如何使用html从excel中提取条件格式规则列表?

如果值不存在,列表理解返回列表

Polars:用氨纶的其他部分替换氨纶的部分

如何创建一个缓冲区周围的一行与manim?

多处理队列在与Forking http.server一起使用时随机跳过项目

如何在达到end_time时自动将状态字段从1更改为0

处理具有多个独立头的CSV文件

将标签移动到matplotlib饼图中楔形块的开始处

搜索按钮不工作,Python tkinter

pandas fill和bfill基于另一列中的条件

根据客户端是否正在传输响应来更改基于Flask的API的行为

将CSS链接到HTML文件的问题

如何在验证文本列表时使正则表达式无序?

类型对象';敌人';没有属性';损害';

将索引表转换为Numy数组

根据边界点的属性将图划分为子图

正则表达式反向查找

Pandas:根据相邻行之间的差异过滤数据帧