2.5 表达式和运算符
2.5.1 表达式的组成
表达式是可以计算的代码片段,由操作数和运算符构成。操作数、运算符和圆括号按一定的规则组成表达式。表达式通过运算后产生运算结果,返回结果对象。运算结果对象的类型由操作数和运算符共同决定。
运算符表明对操作数进行什么样的运算。运算符包括+、-、*、/等。操作数包括文本常量(没有名称的常数值,例如1、"abc")、变量(例如i=123)、类的成员变量/函数(例如math.pi、math.sin(x))等,也可以包含子表达式(例如(2**10))。
表达式既可以非常简单,也可以非常复杂。当表达式包含多个运算符时,运算符的优先级控制各个运算符的计算顺序。例如,表达式x+y*z按x+(y*z)计算,因为*运算符的优先级高于+运算符。
【例2.22】 表达式示例。
2.5.2 表达式的书写规则
Python表达式遵循下列书写规则。
(1)表达式从左到右在同一个基准上书写。例如,数学公式a2+b2应该写为a**2+b**2。
(2)乘号不能省略。例如,数学公式ab(表示a乘以b)应写为a*b。
(3)括号必须成对出现,而且只能使用圆括号;圆括号可以嵌套使用。
【例2.23】 复杂表达式示例。
数学表达式写成Python表达式为。
2.5.3 运算符概述
Python运算符用于在表达式中对一个或多个操作数进行计算并返回结果值,接受一个操作数的运算符被称作一元运算符,例如正负号运算符+或-;接受两个操作数的运算符被称作二元运算符,例如算术运算符+、-、*、/等。
如果一个表达式中包含多个运算符,则计算顺序取决于运算符的结合顺序和优先级。
优先级高的运算符优先计算,例如,在1+2*3中*的优先级比+高,故先计算2*3。同一优先级的运算符按结合顺序依次计算,例如+、-(以及*、/)为同一优先级左结合的运算符,故1+2-3等同于(1+2)-3;2*4/2等同于(2*4)/2。注意,赋值运算符=为右结合运算符,故a=b=c等同于a=(b=c)。用户可以使用圆括号“()”强制改变运算顺序。
【例2.24】 表达式中运算符的优先级示例。
2.5.4 Python运算符
Python语言定义了许多运算符,按优先顺序排列如表2-4所示。本书后续章节将陆续阐述。通过运算符重载(overload)可以为用户自定义的类型定义新的运算符。
表2-4 Python运算符