ad

《Python编程从0到1 视频教学版》_深入Python设计的本质_1.2.3. 后缀表达式

admin 138 2023-10-19

【摘要】 本书摘自《Python编程从0到1 视频教学版》一书中第1章,第1节,作者是张頔。

3. 后缀表达式

(12+)是后缀表达式。后缀表达式和人们在进行竖式演算的书写次序一致(先写数字, 再写运算符,然后计算结果),如图1. 1所示。

123 先写两个数字

+)456 再写加号运算

579

*) 3 再写一个乘数,然后写乘号

《Python编程从0到1 视频教学版》_深入Python设计的本质_1.2.3. 后缀表达式

1737

图1.1 竖式运算

某些高级计算器支持以后缀次序输入算式,如 HP48G。 在程序设计语言的语法规则 中,后缀序比较少见。本书在1.8.5节的示例中使用了后缀表达式。

1.2.4 表达式的嵌套

复杂的表达式可以由简单表达式和运算符组合而成。12 是表达式,它可以进一步和 乘法运算符组合成12*3,或者和加法运算符组合成12+3。乘法运算的优先级较高。括号 用来改变运算符的运算次序1*(2+3)。表达式自左向右计算(这对减法和除法是至关重要 的),这称为运算符的结合性。

这是小学生就明白的事情,但计算机科学家们感兴趣的是如何严谨地描述上述说明。 在计算机科学中,往往使用如下范式来准确定义表达式(为了方便理解,这里只讨论由数 字、加号、乘号和括号组成的四则运算表达式)。

初级表达式是数字或(四则表达式)①

乘除表达式是初级表达式或

乘除表达式*初级表达式

乘除表达式/初级表达式

四则表达式是乘除表达式或

乘除表达式+四则表达式

乘除表达式-四则表达式

如果读者之前从未接触过这种形式的定义,那着实要动一番脑筋才能理解。请读者仔 细体会上述描述,该描述明确、完整地包含了关于四则运算表达式各个方面的说明。

上述描述表达式的一般形式被称为巴克斯范式 (Backus Normal Form), 这是计算机科 学中用来描述语法的基本模型。 精确地将问题描述成某种模型,对解决问题意义重大。 比 如描述成巴克斯范式的语法解析问题,可以很容易地使用 bison 这类语法解析器来处理。②

在上述定义中充满了用事物自身定义自身的方法,这种方法称为递归。递归是一种非 常重要的程序设计方法。本书将在2.4节对其进行详细介绍。

1.2.5 数据类型

运算符的行为取决于运算数的类型。例如,字符串类型也可以做加法和乘法:

"123"+"456"的值是"123456"

"123"* 2 的值是"123123"

这两种字符串运算分别是拼接和重复。同样的运算符有不同的行为,这称为运算符重 载 (overloading)。 在编程实践中,程序员经常受益于这种便利。本书将在2.5.5 节讲述如何针对自定义类型重载运算符。

1.2.6 副作用

在表达式的求值过程中,对状态的改变称为表达式的副作用。 Python 中内建的各种运 算符(此处是狭义的含义,如加、减、乘、除、比较等运算符,并不包含用户自定义的运 算符或函数)是没有副作用的,但各种函数调用时常带有副作用(比如各种输入、输出函 数)。在使用带有副作用的表达式构建复杂表达式时要格外留意,因为这可能带来程序员 容易忽视的行为。例如:

if expA and expB:

这条语句用来测试表达式A 和 B 都为真的条件。expA and expB的计算具有短路性质, 即如果 A 为假,则整个表达式已然能够判断为假,表达式B 不会被求值。如果表达式B 包含函数调用,则意味着该函数不一定被调用。

不过总体说来, Python 中副作用带来的麻烦并不多。程序员只要不在复杂表达式中嵌 套带有副作用的函数即可避免这些容易混淆的情形。这种编码风格也能很容易遵守。①

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel会计信息处理》_会计信息处理的专家指南_4.4.2 内部收益(利)率函数
下一篇:《Excel会计信息处理》_会计信息处理的专家指南_4.1 现值函数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×