![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=1739562281-1XrFXXNCUPVr5V4V8GvAdeWfSW5aG3mg-0-8b3e4b3152d34d5692374792940aee67)
注意:
(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=1739562281-Mw6PRygdWSYlOD8QIOq8ddFuiqeEMn1F-0-2e8ee12aa99d5007148fa2aac5934664)
结果为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=1739562281-iOu3NowCtMgITNOHFQ74iaonW5bBMhb7-0-292d18495943ebf58e5ef271efc7693d)
关系运算符的优先级低于算术运算符。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739562281-ilv38NvkxgKSxQmf37xYTIpVwIgZWwPO-0-c8c0a38d37815f88a005cc2e059e5434)
3.逻辑运算符
Python中提供了3种逻辑运算符,分别是:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029003.jpg?sign=1739562281-frjPDWnpvDyHtKDrDEgB7le1vk0qRhoa-0-2ef317b3cff75468ddb5b3a09a7b7cb2)
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=1739562281-jJKR7aaxrs14dIR7eAX8K252uGR0rRww-0-1e9e74d164402f8130eb0dd368de5c7e)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029005.jpg?sign=1739562281-fQodAsvbJDE9eQW6wtohmpjkbOc1Ytcm-0-f0095f137cbf314d5a11cad6702f1103)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739562281-PKD3AyQlWBFWAhcmQN7Laus6p6euVsKd-0-12fd2f7f7f20c78d3a5f6f1c1f69ba22)
注意:
(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=1739562281-LNQVaKKBHO6MNwmYVHulU0ce9ZCAwRZ4-0-b2aa1043cb911a1f3d4b4470b629f3bb)
说明:Python中的or是从左到右计算表达式,返回第一个为真的值。
Python中逻辑值True作为数值则为1,逻辑值False作为数值则为0。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030004.jpg?sign=1739562281-iL8aoLT1sHotiQfgnCtJesJaII1iGNcW-0-c817945463c9bcdd28e6fb405d6cfb0f)
由于逻辑值True作为数值则为1,所以True+5的结果为6。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030005.jpg?sign=1739562281-aZBCzSwm9qM0CnHWLcdWMuuLvHOYrqne-0-617c9c64d573da4ecaf33dfed258c0d7)
由于逻辑值False作为数值则为0,所以False+5的结果为5。
4.赋值运算符
赋值运算符“=”的一般格式为:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030006.jpg?sign=1739562281-EesO1qDi6ZsGUOJOOPVP78TUm1Zldbmd-0-3a265a339b08ca86f6c0413343e0aa59)
表示将其右侧的表达式求出结果,赋给其左侧的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030007.jpg?sign=1739562281-uTjvIVqNAyfJp91mMK6XqnEhFRBDd57N-0-3929d9d1c2800497759ca3ecd74868c7)
说明:
(1)赋值运算符左边必须是变量;右边可以是常量、变量、函数调用,或者常量、变量、函数调用组成的表达式。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030008.jpg?sign=1739562281-fanVWcdt6PPEh6rjOkkIRMy7m5mg8MwJ-0-df4dc22ac96afc836c222859631040db)
都是合法的赋值表达式。
(2)赋值符号“=”不同于数学的等号,它没有相等的含义。
例如:x=x+1是合法的(数学中不合法),它的含义是取出变量x的值加1,再存放到变量x中。
赋值运算符如表2-8所示。
表2-8 赋值运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031001.jpg?sign=1739562281-wBU51CLVnvOJHkvC6f1UMHEMFpJi0us4-0-516916c5f5755f2b168a4f356f63a3bc)
5.位运算符
位(bit)是计算机中表示信息的最小单位,位运算符作用于位和位操作。Python中位运算符如下:
按位与(&)、按位或(|)、按位异或(^)、按位求反(~)、左移(<<)、右移(>>)。位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数,下面分别进行介绍。假设a=60,b=13;现在以二进制格式表示它们的位运算如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031002.jpg?sign=1739562281-KCuiWCoICZHCMkItQwyY4ST6F5BKgQFl-0-437418e1535924e800088637ba429b71)
(1)按位与(&)。运算符“&”将其两边的操作数的对应位逐一进行逻辑与运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031003.jpg?sign=1739562281-LeDikJAXIAtBulZsoQ2rfWSoLsEBWtkm-0-5a2f18372973557656191b85f9f35fd4)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031004.jpg?sign=1739562281-FM9bufU2waYKmoAilkAnL4gFKNcJF9Ew-0-e8766e758fcde6c316ae3c7f49e33ad0)
所以,变量c的值为2。
(2)按位或(|)。运算符“|”将其两边的操作数的对应位逐一进行逻辑或运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031005.jpg?sign=1739562281-ezvw45Sd1GWSO7fAKdyAcyhM8jkX6EUD-0-86836b0469e7c45f274750512f9badce)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031006.jpg?sign=1739562281-IwXtrQtTPTTsfrq5hnA4uh5JIrU56UxO-0-f5dc799dcf0b25e1063fd18a8788e4d2)
所以,变量c的值为19。
注意:尽管在位运算过程中,按位进行逻辑运算,但位运算表达式的值不是一个逻辑值。
(3)按位异或(^)。运算符“^”将其两边的操作数的对应位逐一进行逻辑异或运算,每一位二进制数(包括符号位)均参加运算。异或运算的定义:若对应位相异,结果为1;若对应位相同,结果为0。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032001.jpg?sign=1739562281-tpiAKEZnF7B5srLUAvsOOSj4eHuqUHBx-0-ee04de8dc489a7d77760ffad7c05dc56)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032002.jpg?sign=1739562281-0D8OC7VYRbzzOqisZz092qsSRABsgL2t-0-77750f71af7ce77eeffe8c26267e37b3)
所以,变量c的值为17。
(4)按位求反(~)。运算符“~”是一元运算符,结果将操作数的对应位逐一取反。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032003.jpg?sign=1739562281-khU64ErsmsuKFfb1aexXSwGXu7LdxQgY-0-8607bc465d3b4e5510198f5b81a1e79a)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032004.jpg?sign=1739562281-pfUCOJNi6h9o90WTnBcO0yInBbRv21vQ-0-ce737421e2265b2080db3452c3b437e7)
所以,变量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=1739562281-XBS3NUqwUrGT1CSpQAavfDSZAGsGvWHF-0-50ab198d16b39dafc4e1ec0f18d3e863)
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=1739562281-JAoXjq4iIPtvt0lUbESytzvzQk28fCOp-0-ea1543319076e89bd177c5962033b4aa)
表2-10 标识运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033002.jpg?sign=1739562281-cuZKXXv1hvmSxKtNB36KXwmhXF8xkK6e-0-9d917a15fc2ec8cd6f1ab434e303fb37)
8.运算符优先级
在一个表达式中出现多种运算时,将按照预先确定的顺序计算并解析各个部分,这个顺序称为运算符优先级。当表达式包含不止一种运算符时,按照表2-11所示优先级规则进行计算。
表2-11 运算符优先级
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033003.jpg?sign=1739562281-AFxXnl5njnn7FLshfvrYv23gYA5p5Ue5-0-c8e6ccb699ac6e6b03a78347e14c7504)
2.3.2 表达式
表达式是一个或多个运算的组合。Python语言的表达式与其他语言的表达式没有显著的区别。每个符合Python语言规则的表达式计算后都是一个确定的值。对于常量、变量的运算和对于函数的调用都可以构成表达式。
本书后续章节中介绍的序列、函数、对象都可以成为表达式的一部分。
书写表达式需要注意以下几点:
(1)乘号(*)不能省略。例如,数学表达式b2-4ac相应的程序表达式为b*b-4*a*c。
(2)表达式中只能出现字符集允许的字符。例如,数学表达式πr2相应的程序表达式为math.pi*r*r(其中,pi是math模块已经定义的常量)。
(3)表达式只使用圆括号改变运算的优先顺序(不能使用{}或[])。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。