Python 程序设计讲义(17):Python 的数据运算总结

Python 的数据运算包括赋值运算、算术运算、比较运算、位运算、逻辑运算等。本文对运算符的优先级、数据类型转换等进行总结。

一、运算符的优先级

各种运算符的优先级如下表所示:

运算符 说明
** 幂运算
~ 取反运算
*, /, %, // 乘、除、求余、整除
+, - 加、减
<< 左移位运算
>> 右移位运算
& 位与运算
^ 异或运算
` `
>, <, >=, <= 大于、小于、大于或等于、小于或等于
==, != 等于、不等于
**= 幂增强赋值
*=, /= 乘除增强赋值
+=, -= 加减增强赋值
not 逻辑非
and 逻辑与
or 逻辑或

二、数据类型转换规则

进行运算时,参与运算的数据类型可能有多种,如整数、浮点数、复数、字符串、布尔值等。在进行运算时,Python 会将运算符两侧的数据转换为同一种数据类型,然后再进行计算。数据类型转换的规则如下:

1、算术运算

(1)整数与浮点数计算

整数与浮点数计算时,将整数转换为浮点数,然后进行计算,运算结果为浮点数类型。

例如:

a,b=5,5.0
c=a+b
print(c,type(c))

运算结果为:
10.0 <class 'float'>

(2)整数与复数运算

整数与复数运算时,将整数转换为复数,运算结果为复数。

例如:

a,b=5,3-5j
c=a+b
print(c,type(c))

运算结果为:
(8-5j) <class 'complex'>

(3)浮点数与复数运算

浮点数与复数运算时,将浮点数转换为复数,运算结果为复数。

例如:

a,b=5.2,3-5j
c=a+b
print(c,type(c))

运算结果为:
(8.2-5j) <class 'complex'>

(4)整数、浮点数、复数与布尔值运算

当整数、浮点数、复数与布尔值进行运算时,将布尔值转换为整数(布尔值True转换为1,布尔值False转换为0),然后与其他数据类型进行运算,得出相应类型的值。

例如:

a,b=True,False
c=2.5-7j
print(a+4,type(a+4))  #a=1
print(b+4,type(b+4))  #b=0
print(a+4.0,type(a+4.0))
print(a+c,type(a+c))

运算结果为:
5 <class 'int'>
4 <class 'int'>
5.0 <class 'float'>
(3.5-7j) <class 'complex'>
2、逻辑运算

(1)布尔类型与非布尔类型进行逻辑与运算

布尔类型与非布尔类型进行逻辑与运算,首先将布尔类型转换为布尔类型值,然后与非布尔类型进行运算。

运算时根据短路原则得到最终结果。如果左侧的逻辑值为真,结果就是右侧的数据值。如果左侧的逻辑值为假,结果就是逻辑值假。

例如:

#第一种情况:根据短路原则,左侧结果为真,则运算结果由右侧的值决定,此时运算结果为5
a=9>3 and 5
print(a,type(a))
#第二种情况:根据短路原则,左侧结果为假,则运算结果为False
a=1>3 and 5
print(a,type(a))

运算结果为:
5 <class 'int'>
False <class 'bool'>

(2)布尔类型与非布尔类型进行逻辑或运算

布尔类型与非布尔类型进行逻辑或运算,首先将布尔类型转换为布尔类型值,然后与非布尔类型进行运算。

运算时根据短路原则得到最终结果。如果左侧的逻辑值为真,结果就是真。如果左侧的逻辑值为假,结果右侧的数据值。

例如:

#第一种情况:根据短路原则,左侧结果为真,则运算结果为True
a=9>3 or 5
print(a,type(a))
#第二种情况:根据短路原则,左侧结果为假,运算结果由右侧的值决定,则运算结果为5
a=1>3 or 5
print(a,type(a))

运算结果为:
True <class 'bool'>
5 <class 'int'>

(3)非布尔类型与非布尔类型进行逻辑与运算

非布尔类型与非布尔类型进行逻辑与运算,首先将 and 左侧非布尔类型转换为布尔类型值,然后与非布尔类型进行运算。运算时根据短路原则得到最终结果,运算结果不是布尔类型值,而是非布尔类型对应的数据。

根据短路原则,如果左侧的逻辑值为真(非0),结果就是右侧的数据值。如果左侧的逻辑值为假(0),结果就是 0。

例如:

#第一种情况:先把and左侧的9转换为布尔值(True)。根据短路原则,运算结果由右侧的值决定,此时运算结果为5
a=9 and 5
print(a,type(a))
#第二种情况:先把and左侧的0转换为布尔值(False)。根据短路原则,运算结果由左侧的值决定,此时运算结果为0
a=2-2 and 5
print(a,type(a))

运算结果为:
5 <class 'int'>
0 <class 'int'>

(4)非布尔类型与非布尔类型进行逻辑或运算

非布尔类型与非布尔类型进行逻辑或运算,首先将or左侧的非布尔类型转换为布尔类型值,然后与非布尔类型进行运算。运算时根据短路原则得到最终结果,运算结果不是布尔类型值,而是非布尔类型对应的数据。

根据短路原则,如果左侧的逻辑值为真(非0),结果就是左侧的数据值。如果左侧的逻辑值为假(0),结果就是右侧的数据值。

例如:

#第一种情况:先把or左侧的9转换为布尔值(True)。根据短路原则,运算结果由左侧的值决定,此时运算结果为9
a=9.0 or 5.0
print(a,type(a))
#第二种情况:先把or左侧的0转换为布尔值(False)。根据短路原则,运算结果由右侧的值决定,此时运算结果为5
a=2-2 or 5.0
print(a,type(a))

运算结果为:
9.0 <class 'float'>
5.0 <class 'float'>

三、非布尔类型值与布尔类型值之间的对应关系

非布尔类型数据之间进行逻辑运算时,非布尔类型数据对应的布尔数据值如下表所示:

非布尔数据 布尔数据
非0整数、非0浮点数=复数(0.0+0.0j除外)、非空字符串 True
'', "", '''''', """""", 0, 0.0, 0.0+0.0j, None, (), [], {} False

例如:

a=9.0 or 5
print(a,type(a))
a='' or 5
print(a,type(a))
a='''''' or 5.0
print(a,type(a))

运算结果为:
9.0 <class 'float'>
5 <class 'int'>
5.0 <class 'float'>
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐