![Python程序设计应用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/751/31729751/b_31729751.jpg)
2.3 运算符与表达式
在程序中,表达式是用来计算求值的,它是由运算符(操作符)和运算数(操作数)组成的式子。运算符是表示进行某种运算的符号;运算数包含常量、变量和函数等。例如,表达式4+5,在这里4和5称为操作数,“+”称为运算符。
下面分别对Python中的运算符和表达式进行介绍。
2.3.1 运算符
Python语言支持的运算符有以下几种类型:算术运算符、比较(即关系)运算符、逻辑运算符、赋值运算符、位运算符、成员运算符、标识运算符。
1.算术运算符
算术运算符用于实现数学运算,如表2-5所示。假设其中变量a=10,变量b=20。
表2-5 算术运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028003.jpg?sign=1739611493-IkjahxgiGITxCsf0GEhmlCO3SQyYlgBW-0-734075be8066f3e0011b793515ae7332)
注意:
(1)Python语言算术表达式的乘号(*)不能省略。例如,数学表达式b2-4ac相应的程序表达式应该写成:b*b-4*a*c。
(2)Python语言表达式中只能出现字符集允许的字符。例如,数学表达πr2相应的程序表达式应该写成:math.pi*r*r(其中,math.pi是Python已经定义的模块变量)。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028004.jpg?sign=1739611493-y3aOWFaUw8xF2nzlxwKnjN7R4Bg7RKIX-0-2a71d833292e11cafa295d7584b2fe44)
结果为3.141592653589793。
(3)Python语言算术表达式只使用圆括号改变运算的优先顺序(不能使用{}或[])。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。
2.关系运算符
关系运算符用于两个值进行比较,运算结果为True(真)或False(假)。Python中的关系运算符如表2-6所示。假设变量a=10,变量b=20。
表2-6 关系运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029001.jpg?sign=1739611493-0phb5MaNgEP3QZmcWIoBE7iHxK2gVmOR-0-b94e414faf668ddac7e18e1c88bb02e7)
关系运算符的优先级低于算术运算符。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739611493-UCwTB7xoxZ8mSJ9BrtD9ls51GDLq6ulf-0-f9d6b5c88d9833401497ae5768b76a75)
3.逻辑运算符
Python中提供了3种逻辑运算符,分别是:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029003.jpg?sign=1739611493-1oVDYhvPywLqO8XCyduESBmceLt8VFH4-0-9f7b525f669cb1baa23fdec03c3fe135)
3种逻辑运算符的含义:设a和b是两个参加运算的逻辑量,a and b的意义是,当a、b均为真时,表达式的值为真,否则为假;a or b的含义是,当a、b均为假时,表达式的值为假,否则为真;not a的含义是,当a为假时,表达式的值为真,否则为假。逻辑运算符如表2-7所示。
表2-7 逻辑运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029004.jpg?sign=1739611493-IRJvFdt2U68bz2fTrsMJQUBh8jEAKy1n-0-6a1fe1cbeb0b4c6614966d828e9c1b0a)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029005.jpg?sign=1739611493-65vVebfvaPOLeB1WZHHGLW0gzsfnrxun-0-5969faeec45e9afb3d7e55cac5969333)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739611493-lxsLMvI9ySYfz8YNbMMZbkwS5SH5aw3u-0-781b7ed2fc1d7b09b966d68edc8cd6ee)
注意:
(1)x>1 and x<5是判断某数x是否大于1且小于5的逻辑表达式。
(2)如果逻辑表达式的操作数不是逻辑值True和False时,Python则将非0作为真,0作为假进行运算。
例如:当a=0,b=4时,a and b结果为假(0),a or b结果为真。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030003.jpg?sign=1739611493-u6UkXHCC1mmsr4JIBbH1JOFK4nQyetjG-0-202a91afc4ab7eae0163060bc26aee2f)
说明:Python中的or是从左到右计算表达式,返回第一个为真的值。
Python中逻辑值True作为数值则为1,逻辑值False作为数值则为0。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030004.jpg?sign=1739611493-hEqOhEijMbBjNB7r1V0qoiD8pqHTWS5D-0-d1a65775d0bda05e135b28528699fa8a)
由于逻辑值True作为数值则为1,所以True+5的结果为6。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030005.jpg?sign=1739611493-amtVcjgAMMpeuJK9XOoCOzRGWKFn2aqf-0-aecfe220d17a6c9bf4d8c9ac7d6c38a2)
由于逻辑值False作为数值则为0,所以False+5的结果为5。
4.赋值运算符
赋值运算符“=”的一般格式为:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030006.jpg?sign=1739611493-fgb9A3KxgwR0LE5bDPrN0G5PkoOqoUi9-0-77e3d58d537551cf02298cfa564806c7)
表示将其右侧的表达式求出结果,赋给其左侧的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030007.jpg?sign=1739611493-EstC5b70I3KYIMIynMlpx2TxG1QJWmmk-0-afb679c4a670ccbfce32a6aa4286aa37)
说明:
(1)赋值运算符左边必须是变量;右边可以是常量、变量、函数调用,或者常量、变量、函数调用组成的表达式。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030008.jpg?sign=1739611493-OwSnttizhfolNCW0o261ASDiN4nICPnH-0-78cf310acd56b83a2de04c289de0951a)
都是合法的赋值表达式。
(2)赋值符号“=”不同于数学的等号,它没有相等的含义。
例如:x=x+1是合法的(数学中不合法),它的含义是取出变量x的值加1,再存放到变量x中。
赋值运算符如表2-8所示。
表2-8 赋值运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031001.jpg?sign=1739611493-ADMwZ5PsIT1eV6OKfxQiDKtFOapzDzRk-0-30de0522c04127de27c827943c020ba5)
5.位运算符
位(bit)是计算机中表示信息的最小单位,位运算符作用于位和位操作。Python中位运算符如下:
按位与(&)、按位或(|)、按位异或(^)、按位求反(~)、左移(<<)、右移(>>)。位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数,下面分别进行介绍。假设a=60,b=13;现在以二进制格式表示它们的位运算如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031002.jpg?sign=1739611493-ub8TeOhQbjB8FADYxSuKjdEmg8OsCYkc-0-f80ad70e3ecf94efb1d4eccff071b444)
(1)按位与(&)。运算符“&”将其两边的操作数的对应位逐一进行逻辑与运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031003.jpg?sign=1739611493-Q02q9V97IOsvE0SdVOMnzOVSyUd1p9Wu-0-3da6cb58dc6fa20c34297489a778817d)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031004.jpg?sign=1739611493-ppLTiqwocBGaVIJ049VziYhI1sGJHZjD-0-903ad87b421b788bd0ce21aa5f8aed61)
所以,变量c的值为2。
(2)按位或(|)。运算符“|”将其两边的操作数的对应位逐一进行逻辑或运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031005.jpg?sign=1739611493-6csqndUkGmkSHWE2g9TInX2zp9Z5DZBK-0-54757b1615b7ca4aa741bfd4b2673782)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031006.jpg?sign=1739611493-LgzPEZXkKRErH5uk1pkHd8QhyWixyP2l-0-9efd1b39ea43fdfe9f9084b32d103e9f)
所以,变量c的值为19。
注意:尽管在位运算过程中,按位进行逻辑运算,但位运算表达式的值不是一个逻辑值。
(3)按位异或(^)。运算符“^”将其两边的操作数的对应位逐一进行逻辑异或运算,每一位二进制数(包括符号位)均参加运算。异或运算的定义:若对应位相异,结果为1;若对应位相同,结果为0。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032001.jpg?sign=1739611493-q0MjDxfv5jn1n17dlNBmiDVuayBHmsaU-0-08e9ba8fb996ba047b62916de1c2466c)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032002.jpg?sign=1739611493-8SENVF7PNLXzcniivTDQDCvocHliEuLh-0-dadc109eba1a3f1a6d60e72ca6a2cd3d)
所以,变量c的值为17。
(4)按位求反(~)。运算符“~”是一元运算符,结果将操作数的对应位逐一取反。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032003.jpg?sign=1739611493-BAFbr0u8RdySDXnoxLCSLyDN9ysTaJYi-0-72c742828e5d1ab5bc8dceae0fd5788c)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032004.jpg?sign=1739611493-CBq9zE5mUHb3OSfkuHPjBLwcjeLMYIvf-0-d16de349c38c850929a8bd8d53232a74)
所以,变量c的值为-124。因为补码形式,带符号二进制数最高位为1,则是负数。
(5)左移(<<)。设a、n是整型量,左移运算一般格式为:a<<n,其意义是,将a按二进制位向左移动n位,移出的高n位舍弃,低位补n个0。
例如a=7,a的二进制形式是0000 0111,做x=a<<3运算后x的值是0011 1000,其十进制数是56。
左移一个二进制位,相当于乘2操作。左移n个二进制位,相当于乘以2n操作。
左移运算有溢出问题,因为整数的最高位是符号位,当左移一位时,若符号位不变,则相当于乘以2操作,但若符号位变化时,就会发生溢出。
(6)右移(>>)。设a、n是整型量,右移运算一般格式为:a>>n,其意义是,将a按二进制位向右移动n位,移出的低n位舍弃,高n位补0或1。若a是有符号的整型数,则高位补符号位;若a是无符号的整型数,则高位补0。
右移一个二进制位,相当于除以2操作,右移n个二进制位相当于除以2n操作。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032005.jpg?sign=1739611493-yN8otCMHd1ZelSBOWpNYA50wTHLwfy5r-0-0a8d72c196b9aaf582796ce076bb420b)
a=7,做x=a>>1运算后x的值是3。
6.成员运算符
除了前面讨论的运算符,Python成员运算符判断序列中是否有某个成员。成员运算符如表2-9所示。
7.标识运算符
标识运算符用于比较两个对象的内存位置,如表2-10所示。
表2-9 成员运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033001.jpg?sign=1739611493-Hgf0K8DobxJDk42h5iyxAK4PcoiHdFek-0-b3193f7cc5a8c7b0d83210f53a2d18f1)
表2-10 标识运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033002.jpg?sign=1739611493-418uXYaeH3lYND3wlAJrjQ3SV8TK5Q14-0-32c0ce13655defe8f150c3b541eb35fe)
8.运算符优先级
在一个表达式中出现多种运算时,将按照预先确定的顺序计算并解析各个部分,这个顺序称为运算符优先级。当表达式包含不止一种运算符时,按照表2-11所示优先级规则进行计算。
表2-11 运算符优先级
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033003.jpg?sign=1739611493-2HO1wbXbiQIzP4xdSmFL5ySwAZVQ30U3-0-f2e8553445cf0022279eeb11629f02d7)
2.3.2 表达式
表达式是一个或多个运算的组合。Python语言的表达式与其他语言的表达式没有显著的区别。每个符合Python语言规则的表达式计算后都是一个确定的值。对于常量、变量的运算和对于函数的调用都可以构成表达式。
本书后续章节中介绍的序列、函数、对象都可以成为表达式的一部分。
书写表达式需要注意以下几点:
(1)乘号(*)不能省略。例如,数学表达式b2-4ac相应的程序表达式为b*b-4*a*c。
(2)表达式中只能出现字符集允许的字符。例如,数学表达式πr2相应的程序表达式为math.pi*r*r(其中,pi是math模块已经定义的常量)。
(3)表达式只使用圆括号改变运算的优先顺序(不能使用{}或[])。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。