- Python程序设计应用教程
- 夏敏捷 张西广
- 1795字
- 2021-03-25 10:05:12
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=1739234216-ggWuoIruKxxQKgEbVjSJfqfkytOXAYcc-0-7083adf232c96290e639fb494faaf3e9)
注意:
(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=1739234216-vPAr1T30ZxCx2wBOtcRWs06IHUzuJhVn-0-cf341c5f7372a2edfe25d6ed6962d977)
结果为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=1739234216-aTYzeDp5Yihf6FxvqhV4h7SxBxjWH7ys-0-3f623aa92b59361464b95ffdc2bbb5e3)
关系运算符的优先级低于算术运算符。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739234216-1cZw1A2PnVoFrRwF67ZdBUMWYds2jGtk-0-f92972a29f545c3a55bc3c6bdbefbb41)
3.逻辑运算符
Python中提供了3种逻辑运算符,分别是:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029003.jpg?sign=1739234216-tYxjiVmJ1VtIINO8heP5BLD5RnWhhQjU-0-f7c9f01919e82558e428ec38aa5f44f5)
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=1739234216-MmhMklxBLA61lg7qmNvvwvP6snFOAZTS-0-5afcc7843667cf7b5472bbc2c046139a)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00029005.jpg?sign=1739234216-rn83qs4M2iVZr9KJpZoOH9kJG7IOmgjd-0-b70721e6ebc40d659beb577857f1b9b6)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739234216-fkCXfqxEePwcByd7CSVcRHPFW3Ik7IUw-0-d61c0a019813ca7c66e31066d29440b9)
注意:
(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=1739234216-Mdj9AKC510uPRty3DeeDoZ6LMg03aCQd-0-8f54c660b5b6c9d62356953beaa41f17)
说明:Python中的or是从左到右计算表达式,返回第一个为真的值。
Python中逻辑值True作为数值则为1,逻辑值False作为数值则为0。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030004.jpg?sign=1739234216-F6knQoDdV5uvupEAjdjVLnLkghvb0OgW-0-1c48731673d3c98f9d2aae5eeb300f8c)
由于逻辑值True作为数值则为1,所以True+5的结果为6。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030005.jpg?sign=1739234216-ayqDAUM74Lw8UxTEvRshBVs3JFTVzbsD-0-7b9c3853e81f5ca54db0888717829584)
由于逻辑值False作为数值则为0,所以False+5的结果为5。
4.赋值运算符
赋值运算符“=”的一般格式为:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030006.jpg?sign=1739234216-UJ73NJbLax2HsWQfW4ynWqY8KAGozVEt-0-e93ade8ec72b63032d1300ca0a5a43bf)
表示将其右侧的表达式求出结果,赋给其左侧的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030007.jpg?sign=1739234216-8lod7SXHlSjUWo3Mkb2wcJGBgoqkiXFq-0-f1c1a28ea0b4a879e712e6cbf9f0fa8c)
说明:
(1)赋值运算符左边必须是变量;右边可以是常量、变量、函数调用,或者常量、变量、函数调用组成的表达式。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00030008.jpg?sign=1739234216-DMc9NGheCfLwwXtx05pTe323lXr0iqS5-0-75f68524571019377cc31f94620ca642)
都是合法的赋值表达式。
(2)赋值符号“=”不同于数学的等号,它没有相等的含义。
例如:x=x+1是合法的(数学中不合法),它的含义是取出变量x的值加1,再存放到变量x中。
赋值运算符如表2-8所示。
表2-8 赋值运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031001.jpg?sign=1739234216-vTuigxj9fABtwQUBeUvB0DLiXPoDCGkK-0-c5d85dedd2d5e90c6bbe2772bed1ddb1)
5.位运算符
位(bit)是计算机中表示信息的最小单位,位运算符作用于位和位操作。Python中位运算符如下:
按位与(&)、按位或(|)、按位异或(^)、按位求反(~)、左移(<<)、右移(>>)。位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数,下面分别进行介绍。假设a=60,b=13;现在以二进制格式表示它们的位运算如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031002.jpg?sign=1739234216-uZtfxBybf2BF1z5RpARs9CbmRHQWHcek-0-50f40f12b2565b8012b4486d5c2f3d66)
(1)按位与(&)。运算符“&”将其两边的操作数的对应位逐一进行逻辑与运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031003.jpg?sign=1739234216-hABhlaHwXqZAeLpaKulpUUqAOwCXTzBs-0-1d08a92c0171735ef66fbd2182569386)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031004.jpg?sign=1739234216-qC0LL3Hxc1DMc3lgfFiWnQMaFN4glqKK-0-b9823b6f7a9db838cd3a81b6bcaf5be8)
所以,变量c的值为2。
(2)按位或(|)。运算符“|”将其两边的操作数的对应位逐一进行逻辑或运算,每一位二进制数(包括符号位)均参加运算。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031005.jpg?sign=1739234216-64zXdJZkAFNegISe59rvVRUsLdD4x8N5-0-dc43df6a55dd9e8f4b3953cabed5ff9f)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00031006.jpg?sign=1739234216-6lvjsbFe3pXk9d71mc35QxDyKpa5wZtW-0-bfbf66a808db84e0edda3ae8d34c0d64)
所以,变量c的值为19。
注意:尽管在位运算过程中,按位进行逻辑运算,但位运算表达式的值不是一个逻辑值。
(3)按位异或(^)。运算符“^”将其两边的操作数的对应位逐一进行逻辑异或运算,每一位二进制数(包括符号位)均参加运算。异或运算的定义:若对应位相异,结果为1;若对应位相同,结果为0。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032001.jpg?sign=1739234216-VXLuUFhTn4uU1IxMLnNPRQDUCPNDCz08-0-f67cdeacf930971989f0c47714b0cfaf)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032002.jpg?sign=1739234216-pWGg75s10V33bEVxGJDAbSqwEzuZnJuk-0-9f39f53023bdea1a0937b381dea277ec)
所以,变量c的值为17。
(4)按位求反(~)。运算符“~”是一元运算符,结果将操作数的对应位逐一取反。
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032003.jpg?sign=1739234216-dwl0b69hmfsjL4j9LWcONsNomfYti09h-0-da24769bc50230870e5269dc40b3f15f)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00032004.jpg?sign=1739234216-7r7aXKUJgQEeGS87FfzWYfcIZ0nIlpwY-0-4c241da2d9276e74d40fd91445e12fdf)
所以,变量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=1739234216-PJTQ6MZ5kSd4yCIkBDGkIH4TVhkQmhaD-0-bb4f108ebdb4f0bdadccc722272a9323)
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=1739234216-p6e6O6X6KlrmwXbJFywFKSO3xR8UP2Wu-0-0ae63ddcd0c94ade590fb3a9c092ceb1)
表2-10 标识运算符
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033002.jpg?sign=1739234216-r2MJejG7KvDaJWzgzTiyWHYHquKWiGDu-0-84f2737791327317db9d853edee68700)
8.运算符优先级
在一个表达式中出现多种运算时,将按照预先确定的顺序计算并解析各个部分,这个顺序称为运算符优先级。当表达式包含不止一种运算符时,按照表2-11所示优先级规则进行计算。
表2-11 运算符优先级
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00033003.jpg?sign=1739234216-keJxaCleeRkhXHLGjFWRjvTTn10pNqbe-0-b8891b8f33aa6e90a7fd192f2dadc7af)
2.3.2 表达式
表达式是一个或多个运算的组合。Python语言的表达式与其他语言的表达式没有显著的区别。每个符合Python语言规则的表达式计算后都是一个确定的值。对于常量、变量的运算和对于函数的调用都可以构成表达式。
本书后续章节中介绍的序列、函数、对象都可以成为表达式的一部分。
书写表达式需要注意以下几点:
(1)乘号(*)不能省略。例如,数学表达式b2-4ac相应的程序表达式为b*b-4*a*c。
(2)表达式中只能出现字符集允许的字符。例如,数学表达式πr2相应的程序表达式为math.pi*r*r(其中,pi是math模块已经定义的常量)。
(3)表达式只使用圆括号改变运算的优先顺序(不能使用{}或[])。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。