![零基础学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=1738879615-vBjtvEAZXJ7PZzY4ShJuki8NaC9WffYb-0-64c4bf815b476d88c92ccab227d30c01)
4.5.2 类型转换规则
Python的运算方式多种多样,有算术运算、布尔逻辑运算等。每种运算又提供了多种运算符。在进行运算时,参加运算的数据又有多种类型,如整数、浮点数、复数、字符串、布尔值等。无论哪种运算,使用了哪种数据类型,Python都会遵循一个运算规则,即将运算符左右两侧的数据转换为同一类型,然后再进行运算。下面总结运算中每种数据类型的转换规则。
1. 算术运算
使用算术运算符连接起来的表达式为算术表达式。这种表达式进行的运算就是算术运算。下面介绍算术运算不同数据类型的转换规则。
(1)同类型数据
同类型数据进行算术运算,数据类型不进行转换,直接进行运算,得出对应的数据类型,如图4.28所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-1.jpg?sign=1738879615-Efqe8RyuRKq9gKns2CkUoT7uj2r02VWx-0-a0bd3ab0441d292311ccc4c1a91893cd)
图4.28 不进行转换
(2)整数与浮点数运算
整数与浮点数运算时,将整数转换为浮点数,然后再进行运算,最后得出浮点数,如图4.29所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-2.jpg?sign=1738879615-YV6bMGCq8HyHLl0sAoiOYREm5d4L4QsA-0-37c81bcacc7f2334ad204f7ba0f8a01f)
图4.29 整数转换为浮点数
(3)整数与复数运算
整数与复数运算时,将整数转换为复数,然后再进行运算,最后得出复数,如图4.30所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-105-3.jpg?sign=1738879615-QofFBfFN5Rtft2y4QRxBfNxfiOxXSwYg-0-3f1de7743ece32d48c8f36f3338ba75d)
图4.30 整数转换为复数
(4)浮点数与复数运算
浮点数与复数运算时,将浮点数转换为复数,然后再进行运算,最后得出复数,如图4.31所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-1.jpg?sign=1738879615-bZlILKt0wIhRWjmBbAjIt8gmeQZ2wJ2h-0-f3d1b9e9b4deb8ee2cc809abb0668050)
图4.31 浮点数转换为复数
(5)与布尔值运算
当整数、浮点数、复数与布尔值进行运算时,将布尔值转换为整数,然后与其他数据类型进行运算,得出其他类型的数据,如图4.32所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-2.jpg?sign=1738879615-mWUyMzdPZcsoV5drQ0Z7J2waCxA2Sl1L-0-df8d4ffbd71b6ba3b3cddcc71e9159be)
图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=1738879615-pEJKRgfXqtnLLStYaqttaJlDycEc9nEw-0-46ba806ac02a05289e915f35560b9d1e)
执行后,得出运算结果为6.5。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-4.jpg?sign=1738879615-AUfSRLYylDXLXOrtqUkSwKi9uztD328V-0-4f58964fda7ada56bf7fec2df6a1ca22)
实例中,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=1738879615-X95G7qv8MTl8G7ROg9nmJb7z4YFSzOsu-0-b25fa8f589855c3c16d4e25b30e846fc)
执行后,得出运算结果为5.5。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-106-6.jpg?sign=1738879615-E20qP3XUSLQ7a1RiNoZDcHlQTjjnUIP8-0-b0f92b52629a9e1b71570a599abf5a06)
实例中,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=1738879615-uO6BEju0HQivmQtfyiaxbE21XCazxCyd-0-f65efb78646c9530d01c73925c7933f7)
图4.33 数据类型不转换
【实例4-36】下面通过代码将布尔类型10>8与布尔类型5>3+6进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-2.jpg?sign=1738879615-3UMdd6zimn4ff7nkWhKergViRORKXXTw-0-96d95dc6be51049f86f4914b95988bd3)
执行后,得出布尔类型值。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-3.jpg?sign=1738879615-JOgmrN4ZMgM3iyxk319h68KGd1tt552e-0-4b71e45f0c31b46dbcc8598322d5fa26)
实例中,表达式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=1738879615-UKoLYTZgsnQqOpzglEzA5lc97nvBOspl-0-bb68ec6378b6aba55354e20a92bbdf06)
执行后,得出布尔类型值。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-5.jpg?sign=1738879615-g9ft4UkdNY2FqdNOKtxqeZINvzRBfBJl-0-15107a9afdde9588670f6e257903d5d7)
实例中,布尔类型值False与布尔类型值True进行逻辑或运算,最终运算结果为布尔类型,值为True。
(2)布尔类型与非布尔类型进行逻辑与运算
布尔类型与非布尔类型进行逻辑与运算,首先将布尔类型转换为布尔类型值,然后与非布尔类型进行运算。运算时将根据短路原则得出最终结果。该结果可能为布尔类型值也可能为非布尔类型相应的类型。为了方便讲解,这里将非布尔类型指定为整数5。
① 结果为非布尔类型值的转换规则如图4.34所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-6.jpg?sign=1738879615-mylakmheBBOCYlLtRbhB4XQRtZJJr7ek-0-86dfe4fae15c957037501d3e83b1a1ec)
图4.34 结果为非布尔类型值的转换规则
② 结果为布尔类型值的转换规则如图4.35所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-7.jpg?sign=1738879615-hr7tnz3LDkhOMXHCjHKw22ejKRAP3tiW-0-ee72ac8195f0ac43672c9ad7c3e72e18)
图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=1738879615-DE4iVNM6cq2NH1Yo3IIEzEWZWxtb2arp-0-e72ed74207481f5fc13457e0afd34470)
执行后,得出浮点数60.8,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-107-9.jpg?sign=1738879615-LFGQqZF1d9S2mSmgKCdXSBBSVTg9Utl9-0-eeef7288bca036fffd3556f3625b9bc2)
实例中,表达式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=1738879615-XrrrN7TaKFeYstmQWS3LhJyWOKq5ASzw-0-4af1b2f782401284664f26434e8fece5)
执行后,得出布尔类型值False,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-2.jpg?sign=1738879615-NTTtCL3xjMFeyJ4pATKiFxFruKbcl3Sa-0-2410fca38ef4632406fd14fc1fdf4409)
实例中,表达式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=1738879615-GbJKQawYp7RT65BWyIHhlHpSegzkeMlu-0-02ef01e7c34a9524c1987707dc904925)
图4.36 结果为布尔类型值的转换规则
② 结果为非布尔类型值的转换规则如图4.37所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-4.jpg?sign=1738879615-SdvTwEOp2yPdPT6updP4mdD3CrlnGGg2-0-7d1f9564e4e28c8c204ff5722d8069bb)
图4.37 结果为非布尔类型值的转换规则
【实例4-40】通过代码将布尔类型45<=5*9与整数12进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-5.jpg?sign=1738879615-rPoT0teIdFikWzDmYIgafSWJG3Q5IdIS-0-1e9656672c2bc82fc8d5744aa0804c40)
执行后,得出布尔类型值True,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-6.jpg?sign=1738879615-EZX44fYyyQkIwRblVMLC9Hf7jCGDczZL-0-5d11c785863ed80be7ffbddcfa0442e7)
实例中,表达式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=1738879615-JfAO8hCGq8up2ZkqrWu8UXq7ogzA2TTw-0-8432b4e3f6bfaf8740b4d9ac3b8f7e5b)
执行后,得出整数12,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-108-8.jpg?sign=1738879615-CpliM3mdyYVhcUDCmj6109sJWskdAA9Y-0-e7590f6aabe13d71b7eaceafe0cea219)
实例中,表达式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=1738879615-pa56IGtDmeSYz64mbhwQe3GmmFuZMwLD-0-70ec6e09f254815d82d1de68178cd246)
图4.38 右侧决定运算结果(逻辑与)
② 左侧的布尔类型值为False时,结果由左侧决定,如图4.39所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-2.jpg?sign=1738879615-T3BLXh91oqyY2fCtTs5mVwiIzYanEq82-0-afa385ba0a03e32a7c8c45141d8924b8)
图4.39 左侧决定运算结果(逻辑与)
【实例4-42】通过代码将非布尔类型5*9与非布尔类型3+4进行逻辑与运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-3.jpg?sign=1738879615-R1yZNpbP3RMjrGeVQrYRd8v3aeDAXYM7-0-a65a16c6c13e429f1bbd3b08aaad683f)
执行后,得出非布尔类型数据3+4的计算值7,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-4.jpg?sign=1738879615-KP1w6pUHkDZAZhwKNVdz0RoikwsZVben-0-6ca32b5aca5eeb9af913067871b89dd4)
实例中,表达式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=1738879615-NODPSUgjqWhhdAaFTPluw7jQV190XRMv-0-ce843df6499a17b3b20e84b8e6eb8f1f)
执行后,得出非布尔类型数据5-5的计算值0,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-109-6.jpg?sign=1738879615-7OcOfc5Zr0MdPhebExlZaUOv2KcJ0dsU-0-c796a23b7194f0446b4d8f4213b3065f)
实例中,表达式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=1738879615-1hoLMv27AaH4Z9P8VAoLVCDn2wULFsGa-0-15c58197f4839a33312cc6d3e784cf66)
图4.40 左侧决定运算结果(逻辑或)
② 左侧的布尔类型值为False时,结果由右侧决定,如图4.41所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-2.jpg?sign=1738879615-6pY0knxN8pEAUHsxWfF7l8OEnc5xBSYK-0-ad4a8bd8dedf20bf91e7b38eb9805da2)
图4.41 右侧决定运算结果(逻辑或)
【实例4-44】通过代码将非布尔类型5*9与非布尔类型3+4进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-3.jpg?sign=1738879615-RTWpnu9K6KKpijyMMNi8UifQhngcHBiU-0-a06eb86713041919c38f054f18123fe4)
执行后,得出非布尔类型数据5*9的计算值45,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-4.jpg?sign=1738879615-hl0HqMbhIQralPMVgwtTIHj0SwjKY7ST-0-192341011208c1d76c1bf3e7c5d76ff6)
实例中,表达式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=1738879615-jMXiMg2AE8YEBNui0he28BBtDj49Hx0U-0-04963efa6c5ebb7374822242d48dbf64)
执行后,得出非布尔类型数据3+4的计算值7,如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-110-6.jpg?sign=1738879615-Fc8eEs48vaokpz0RvAaEHs3Hj73dEmsU-0-56e7704f502f356da72b325d91c05ae1)
实例中,表达式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=1738879615-aSYAi0l1HYP1B4lKehug4SVh0u43FpYp-0-3176d7e2a8b4f7d8e916d482fd91b26e)
【实例4-46】下面通过代码将字符串“60”与整数60进行逻辑或运算,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-111-1.jpg?sign=1738879615-3p3zcvKm0ZZ2oTz2jhG7sLgeNDC6EUVo-0-2d1c1e4f27299f1ceef028220c3c0a82)
执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-111-2.jpg?sign=1738879615-UyuMv1uQdo1YHREV81bnYJs4boHxKygP-0-cd8f66eff2931ac424878c163686a8c8)
得出的是一个字符串“60”,因为字符串“60”,转换为布尔值为True,在逻辑或运算中,计算结果由字符串“60”决定。