![零基础学Python程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/24/43738024/b_43738024.jpg)
4.5 运算汇总
以上讲述了各种运算符,如算术运算符、位运算符、逻辑运算符等。不同的运算符决定运算的先后顺序,也决定了运算后数据类型。本节对运算符的优先级和进行运算时的类型转换规则进行汇总,供读者参考。
4.5.1 运算符优先级汇总
Python的各种运算符优先级(从高到低)如表4-7所示。
表4.7 各种运算符优先级
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-104-2.jpg?sign=1739631165-oj5GgSKDw9X77EurBvD0zKvhqGBQJpT0-0-66255c08d2f888bfff9e217b2d2de5fb)
4.5.2 类型转换规则
Python的运算方式多种多样,有算术运算、布尔逻辑运算等。每种运算又提供了多种运算符。在进行运算时,参加运算的数据又有多种类型,如整数、浮点数、复数、字符串、布尔值等。无论哪种运算,使用了哪种数据类型,Python都会遵循一个运算规则,即将运算符左右两侧的数据转换为同一类型,然后再进行运算。下面总结运算中每种数据类型的转换规则。
1. 算术运算
使用算术运算符连接起来的表达式为算术表达式。这种表达式进行的运算就是算术运算。下面介绍算术运算不同数据类型的转换规则。
(1)同类型数据
同类型数据进行算术运算,数据类型不进行转换,直接进行运算,得出对应的数据类型,如图4.28所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-1.jpg?sign=1739631165-Wpla2s5lWdbYifIB1AZRsXnN5O2Paoqq-0-cc16c18bea40bed09b05aa1ee15731ef)
图4.28 不进行转换
(2)整数与浮点数运算
整数与浮点数运算时,将整数转换为浮点数,然后再进行运算,最后得出浮点数,如图4.29所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-2.jpg?sign=1739631165-LhBEeazAAmuajcvrsvjqKkiFNBaZQGBW-0-fc9f1fb7ab943fe2e5fa48dcc2741dd6)
图4.29 整数转换为浮点数
(3)整数与复数运算
整数与复数运算时,将整数转换为复数,然后再进行运算,最后得出复数,如图4.30所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-3.jpg?sign=1739631165-rgdW3OBbGXWAd4YRLG5zNInzdeOCmMHC-0-f2cc0b27ba8ec9f367dcaf784f331562)
图4.30 整数转换为复数
(4)浮点数与复数运算
浮点数与复数运算时,将浮点数转换为复数,然后再进行运算,最后得出复数,如图4.31所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-1.jpg?sign=1739631165-u4PP3pQ6dg2tHoLJw5B4PlbZ8hBmCX7L-0-5b833ceebbc16b28b244fee801bcba97)
图4.31 浮点数转换为复数
(5)与布尔值运算
当整数、浮点数、复数与布尔值进行运算时,将布尔值转换为整数,然后与其他数据类型进行运算,得出其他类型的数据,如图4.32所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-2.jpg?sign=1739631165-226mKRStQYJwxkvoPirclsi1dMIlzZ6u-0-80479ee91a04197ad08f60ed870f13b1)
图4.32 布尔值转换为整数
Python的布尔值只有两个:True和False,在算术运算中,布尔值True被当作整数1,False被当作整数0参加运算。
【实例4-34】通过代码将浮点数5.5与布尔值True进行运算。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-3.jpg?sign=1739631165-YzVno3wbmqJKnlGiE7zj8pD1rMibx9KN-0-64e079150d55c06a55099da301b26298)
执行后,得出运算结果为6.5。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-4.jpg?sign=1739631165-Nkx4uYCiwiW3SeX0jdx579qVTbsti4JB-0-6e96f937275a67ba62e478a40637a0d3)
实例中,5.5为浮点数,True布尔值为整数1,因此,浮点数5.5与整数1进行加法运算,最终运算结果为浮点数6.5。
【实例4-35】通过代码将浮点数5.5与布尔值False进行运算。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-5.jpg?sign=1739631165-kolrCIoZzyIYlsDYJnQeof4SF7KJLcwW-0-e40c374682d5b349186ca729af0ab444)
执行后,得出运算结果为5.5。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-6.jpg?sign=1739631165-gCITTzxmXhTCq1D7jqZ5lqjqF8wibFIT-0-4e83c3fd00ab79843005d84012789f02)
实例中,5.5为浮点数,False布尔值为整数0,因此,浮点数5.5与整数0进行加法运算,最终运算结果为浮点数5.5。
2. 布尔逻辑运算
使用逻辑运算符连接起来的表达式为逻辑表达式。这种表达式进行的运算就是布尔逻辑运算。下面介绍布尔逻辑运算不同数据类型的转换规则。
(1)布尔类型与布尔类型进行逻辑运算
布尔类型与布尔类型进行逻辑运算,数据类型不进行转换,直接按照运算规则进行运算,如图4.33所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-1.jpg?sign=1739631165-509tcRa15nRRGu6ZgvGBrkVupajeCH0x-0-cccffaa9c297fac13cb47ad9e008297f)
图4.33 数据类型不转换
【实例4-36】下面通过代码将布尔类型10>8与布尔类型5>3+6进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-2.jpg?sign=1739631165-FnsS7rxzRIsVKQE5ph9zItxUaCkehhBn-0-ea34a9ebc498377ac2564800827e78cc)
执行后,得出布尔类型值。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-3.jpg?sign=1739631165-kta5Ms82yO0CCzXkPacn379q8U74KYxm-0-dd6eb33d3bd9a70d0639c425d7680ec7)
实例中,表达式10>8运算结果是一个布尔值True,表达式5>3+6运算结果是一个布尔值False。True与False进行逻辑与运算,最终运算结果为布尔类型,值为False。
【实例4-37】下面通过代码将布尔类型False与布尔类型True进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-4.jpg?sign=1739631165-bkntoRDTbM2uDSBZVoX47Z6JrMTyLBpZ-0-ddd060863e2443b10fe6353c3574c54c)
执行后,得出布尔类型值。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-5.jpg?sign=1739631165-qBqtGvqt2Zs4ONsmHgdImHl3vefW6QbN-0-e8a9a09d5ab5dd0c7d504d1fb927f4d5)
实例中,布尔类型值False与布尔类型值True进行逻辑或运算,最终运算结果为布尔类型,值为True。
(2)布尔类型与非布尔类型进行逻辑与运算
布尔类型与非布尔类型进行逻辑与运算,首先将布尔类型转换为布尔类型值,然后与非布尔类型进行运算。运算时将根据短路原则得出最终结果。该结果可能为布尔类型值也可能为非布尔类型相应的类型。为了方便讲解,这里将非布尔类型指定为整数5。
① 结果为非布尔类型值的转换规则如图4.34所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-6.jpg?sign=1739631165-t95HUHEVHylNqMLUitxyXdOCYhNrMTcJ-0-ed2b191f53340048528281ff4a384a4e)
图4.34 结果为非布尔类型值的转换规则
② 结果为布尔类型值的转换规则如图4.35所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-7.jpg?sign=1739631165-JgngN8CXY3xPUQaY1zDxS2Q9Vby5YHrc-0-88af0a59cc7d57948d9485907d20584d)
图4.35 结果为布尔类型值的转换规则
【实例4-38】通过代码将布尔类型5*5==12+13与浮点数60.8进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-8.jpg?sign=1739631165-X006tnbjNDaMRjF2kSkv6bxkzXf5WLOf-0-54dca0d8e6e306f9ed447b5c5e3dd197)
执行后,得出浮点数60.8,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-9.jpg?sign=1739631165-d2QvLJ3bA0bkY1duh4n8snZt59vg5n0Z-0-8185ae9962680e3c2cc06b203225cc15)
实例中,表达式5*5==12+13运算结果是一个布尔值True,True与浮点数60.8进行逻辑与运算,结果由and右侧的浮点数60.8决定。因此,最终结果为浮点数60.8。
【实例4-39】通过代码将布尔类型5*5==2**5与浮点数60.8进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-1.jpg?sign=1739631165-e2dy0zB9YlkCz1x5wcSF1HCE5acu49dn-0-9862110d163f6f71ab47dabaf5731b0c)
执行后,得出布尔类型值False,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-2.jpg?sign=1739631165-GllNcNTfYk9iIbRDrGdM5wyzmQVrVlGQ-0-eea76e4ef1fb3b627a0817ed50dccb17)
实例中,表达式5*5==2**5运算结果是一个布尔值False,False与浮点数60.8进行逻辑与运算,结果由and左侧的布尔值决定。因此,最终结果为布尔值False。
(3)布尔类型与非布尔类型进行逻辑或运算
布尔类型与非布尔类型进行逻辑或运算,与逻辑与运算类似,也是先将布尔类型转换为布尔类型值,然后与非布尔类型进行运算,根据短路原则得出最终结果。
① 结果为布尔类型值的转换规则如图4.36所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-3.jpg?sign=1739631165-CVlJAfrLhLaIcJKx6llgyUWJDfTHCpX9-0-21faf4a0d95c0237575d40822f3d18f0)
图4.36 结果为布尔类型值的转换规则
② 结果为非布尔类型值的转换规则如图4.37所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-4.jpg?sign=1739631165-vC3iCYuMF9dux3bLDNBpmXgvXs0L5ztv-0-fc54bf08bbf5c9bbec61a02ec4ee5763)
图4.37 结果为非布尔类型值的转换规则
【实例4-40】通过代码将布尔类型45<=5*9与整数12进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-5.jpg?sign=1739631165-oLfv7yCK2QaCBY6sEt4AabOUZzHkVdDT-0-8100d2d858513e922a705e9a55026dc0)
执行后,得出布尔类型值True,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-6.jpg?sign=1739631165-KlHOAvUxJMFqIoz5Qy980dTfT82p7VPq-0-ed8bfd605b934c24aa8ee52316b1be5e)
实例中,表达式45<=5*9运算结果是一个布尔值True,True与整数12进行逻辑或运算,结果由or左侧的布尔值决定。因此,最终结果为布尔值True。
【实例4-41】通过代码将布尔类型45<5*9与整数12进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-7.jpg?sign=1739631165-sUm1FdFh3lfQ88XOEZBBw7Yjwq5oYLg6-0-64a06e2dffdc2e7b88ae01c24807c4d1)
执行后,得出整数12,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-8.jpg?sign=1739631165-HNm6sgXsdPvJSGsU1yrNgFsTrPxKd4ZF-0-92892de6f639dfab16138e48bac958d1)
实例中,表达式45<5*9运算结果是一个布尔值False,False与整数12进行逻辑或运算,结果由or右侧的整数决定。因此,最终结果为整数12。
(4)非布尔类型与非布尔类型进行逻辑与运算
非布尔类型与非布尔类型进行逻辑与运算,首先将and左侧非布尔类型转换为布尔类型值,然后根据短路原则得出最终结果,但是该结果不是布尔类型值,而是非布尔类型对应的数据。
① 左侧的布尔类型值为True时,结果由右侧决定,如图4.38所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-1.jpg?sign=1739631165-E3ctgSI6IMUHutvHll8ubJIPDUI15OdR-0-6f79af9294a750a2de558671c2eed640)
图4.38 右侧决定运算结果(逻辑与)
② 左侧的布尔类型值为False时,结果由左侧决定,如图4.39所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-2.jpg?sign=1739631165-q0ytM5o4U3e8YIwqT87YEFgQlxL3G2nt-0-612a6abc01aacb05a8a9ac4284270631)
图4.39 左侧决定运算结果(逻辑与)
【实例4-42】通过代码将非布尔类型5*9与非布尔类型3+4进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-3.jpg?sign=1739631165-qSf05sReU3OAXQD7NWB4PI7eoAP54xYh-0-59c005104f4705deea054c0bd09becc6)
执行后,得出非布尔类型数据3+4的计算值7,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-4.jpg?sign=1739631165-nq8qitSS9ExfiBINfFROO2qQzlfTsO68-0-8b449c6d4205023cd62929c9daaf9c4b)
实例中,表达式5*9运算结果是45,对应的布尔值为True,True与表达式3+4进行逻辑与运算,结果由and右侧的表达式3+4决定。因此,最终结果为整数7。
【实例4-43】通过代码将非布尔类型5-5与非布尔类型3+4进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-5.jpg?sign=1739631165-IsCgSgI4vNIlyYOiIwoWodM6jk1urUmj-0-f419f66bb649f9acec0457d236b989db)
执行后,得出非布尔类型数据5-5的计算值0,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-6.jpg?sign=1739631165-MUSK0RnR1uj40zFyXsjMGZWL2jblADtp-0-f40fd17efd138df2ce2a642cd27d06e9)
实例中,表达式5-5运算结果是0,对应的布尔值为False,False与表达式3+4进行逻辑与运算,结果由and左侧的表达式5-5决定。因此,最终结果为0。
(5)非布尔类型与非布尔类型进行逻辑或运算
非布尔类型与非布尔类型进行逻辑或运算,与逻辑与运算类似,它是将or左侧非布尔类型转换为布尔类型值,然后根据短路原则得出最终结果,该结果也是非布尔类型对应的数据。
① 左侧的布尔类型值为True时,结果由左侧决定,如图4.40所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-1.jpg?sign=1739631165-19IaXTyKDf3O6BY4r0uZyqbqrckshTNa-0-d9495e6f84ec36d2b7f7da479d941c6a)
图4.40 左侧决定运算结果(逻辑或)
② 左侧的布尔类型值为False时,结果由右侧决定,如图4.41所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-2.jpg?sign=1739631165-yS320Czp73rpJA1k0c1V1iRSjH7jhygt-0-0f45c9f33d9e06c5b86ee9c967195db0)
图4.41 右侧决定运算结果(逻辑或)
【实例4-44】通过代码将非布尔类型5*9与非布尔类型3+4进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-3.jpg?sign=1739631165-LO8luE1szHUaSeR0GVYMsXS7zspojZRp-0-df9d0da72551fca6611ce9a33d34086a)
执行后,得出非布尔类型数据5*9的计算值45,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-4.jpg?sign=1739631165-a03tvqxApeIUKoPQGBhBNyiUaVYQovVx-0-f5858b5a1fd83852be6999e8748d37de)
实例中,表达式5*9运算结果是45,对应的布尔值为True,True与表达式3+4进行逻辑或运算,结果由or左侧的表达式5*9决定。因此,最终结果为45。
【实例4-45】通过代码将非布尔类型5-5与非布尔类型3+4进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-5.jpg?sign=1739631165-cV3Da8pQC4TeYBwsc6LNTXGw5fFrkGzj-0-4fbbb9b706b4ac06f3ac3d959fd2b3b6)
执行后,得出非布尔类型数据3+4的计算值7,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-6.jpg?sign=1739631165-OIR1rcXcVrptOh37TpUKC9szN3euNjzG-0-74ea58191e60396b025033135f28bf92)
实例中,表达式5-5运算结果是0,对应的布尔值为False,False与表达式3+4进行逻辑或运算,结果由or右侧的表达式3+4决定。因此,最终结果为7。
4.5.3 布尔类型值
非布尔类型数据之间进行逻辑运算时,这些非布尔类型数据都有对应的布尔类型值,如表4-8所示。
表4.8 其他数据对应的布尔类型值
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-7.jpg?sign=1739631165-Aob60ngXKjkxwQwwvWWHAVNOf6I1CX9l-0-152ab35ab18f30d4b1e070576bb1a6dd)
【实例4-46】下面通过代码将字符串“60”与整数60进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-111-1.jpg?sign=1739631165-oEKLMBzZuoxHbWomrQJb5Rkq2t913Ivf-0-f19e55cacf5c466754b0bc41864e0162)
执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-111-2.jpg?sign=1739631165-FbFJvdSPPP4rAGZExHWWkTs7dwUzfFqp-0-409e2c3ef17483f1bad11c410cbbb403)
得出的是一个字符串“60”,因为字符串“60”,转换为布尔值为True,在逻辑或运算中,计算结果由字符串“60”决定。