打开《Python入门与实战》_一步步学会Python_8.4.2 案例解析
138
2023-10-19
【摘要】 本书摘自《Python编程从0到1 视频教学版》一书中第1章,第1节,作者是张頔。
3. 后缀表达式
(12+)是后缀表达式。后缀表达式和人们在进行竖式演算的书写次序一致(先写数字, 再写运算符,然后计算结果),如图1. 1所示。
123 先写两个数字
+)456 再写加号运算
579
*) 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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~