2 Python数据类型
介绍
Python3中主要的内置类型为:数字、列表、字典、类、实例和异常。
通常使用到的基本数据类型有:
- 数字(
int
、float
、complex
):int
表示整数;float
表示浮点数;complex
表示复数,并用j
或J
表示虚数部分。 - 布尔值(
bool
):实际上bool
是int
的子类型,其只有两种取值(True
和False
),并支持直接与int
类型的变量做运算(True
表示为\(1\),False
表示为\(0\))。 - 文本字符串(
str
):用单引号''或双引号""包围的变量,表示文本。 - 二进制列(
bytes
):属于文本类型的高级数据类型,除了bytes
之外还有bytearray
等类型,一般形式是b''
。 - 列表(
list
、tuple
):被[]
包围的是列表list
,属于可变数据类型;被()
包围的是元组tuple
,属于不可变数据类型。 - 集合(
set
):被{}
包围的若干个数据,其中不能包含重复的元素。 - 字典(
dict
):被{}
包围的若干个数据,但是其中的元素形如a:b
,a
,b
分别是基本数据类型,表示一种映射。在一个字典内,不能存在相同的a
。 - 空值(
NoneType
):只有一个取值None
。 - 其他,例如“类和类的实例”、“异常”等。
可变类型和不可变类型
与Java类似,像int
、float
、bool
、str
、tuple
等类型的数据属于不可变数据类型;list
、set
、dict
属于可变数据类型。
- 不可变数据类型:变量被修改时,内存地址也发生改变;
- 可变数据类型:变量被修改时,直接在内存地址上修改,修改之后内存地址不会发生改变。
可以通过id()
函数获取变量的唯一标识值,以此来表征内存地址。
id(object)
'''
返回对象的“标识值”,在此对象的生命周期中保证是唯一且恒定的。
:param object: 变量。
:rtype: int。
'''
a = 12
print(id(a)) # 140711708867352
a = 3
print(id(a)) # 140711708867064(内存地址被修改)
b = 'str'
print(id(b)) # 140711707721680
b += 'a'
print(id(b)) # 2231534285232(内存地址被修改)
c = ['abcd', 'efg']
print(id(c)) # 2231531657472
c += ['hij']
print(id(c)) # 2231531657472(内存地址未修改)
对于可变数据类型的比较,在已经
获取变量的类型
Python中内置了函数type()
和isinstance()
来获取判断变量的类型。
type(object)
'''
获取变量的数据类型。
:param object: 变量。
:return: 返回object的类型。
'''
# 使用:
print(type(10)) # 输出<class 'int'>
print(type('python')) # 输出<class 'str'>
print(type(True)) # 输出<class 'bool'>
isinstance(object, classinfo)
'''
判断变量的数据类型。
:param object: 变量。
:param classinfo: 类型。
:return: True: object是classinfo或者其子类的实例。
False: object不是给定类型的对象。
'''
# 使用:
print(isinstance('player', str)) # True
print(isinstance(12, int)) # True
print(isinstance(10, float)) # False,说明float与int并无关系。
print(isinstance(True, int)) # True,说明bool是int的子类型。
print(isinstance(True + 1, int)) # True
print(type(True) == int) # False,说明type()函数没有考虑到子类型,因此在判断类型的时候不推荐使用'type() == '的方式。
数字、布尔值以及运算符
布尔取值
None
、False
、任何数值类型的\(0\)(包括0
、0.0
、0j
)、空列表(''
、[]
、{}
、()
、range(0)
)等具有“空/假”意义的变量被判断为False
;其他值为True
。
基本运算
含义 | Python表示 | 数学表示 | 备注 |
---|---|---|---|
加 | \(a\ +\ b\) | \(a + b\) | |
减 | \(a\ -\ b\) | \(a - b\) | |
乘 | \(a\ *\ b\) | \(a \times b\) | |
除 | \(a\ /\ b\) | \(a \div b\) | 返回\(float\)类型 |
整数除 | \(a\ //\ b\) | \(\lfloor a \div b \rfloor\) | 返回\(int\)类型 |
取余 | \(a\ \%\ b\) | \(a\ mod\ b\) | |
乘方 | \(a\ **\ b\) | \(a^b\) |
比较运算
比较运算的返回值是bool
类型。
含义 | Python表示 | 含义 | Python表示 |
---|---|---|---|
等于 | \(a\ ==\ b\) | 不等于 | \(a\ !=\ b\) |
小于 | \(a\ <\ b\) | 大于 | \(a\ >\ b\) |
小于等于 | \(a\ <=\ b\) | 大于等于 | \(a\ >=\ b\) |
赋值运算
含义 | Python表示 | 解释 |
---|---|---|
直接赋值 | \(a\ =\ b\) | |
加法赋值 | \(a\ +=\ b\) | \(a = a + b\) |
减法赋值 | \(a\ -=\ b\) | \(a = a - b\) |
乘法赋值 | \(a\ *=\ b\) | \(a = a \times b\) |
除法赋值 | \(a\ /=\ b\) | \(a = a \div b\),返回\(float\)类型 |
整除赋值 | \(a\ //=\ b\) | \(a = \lfloor \frac{a}{b} \rfloor\),返回\(int\)类型 |
取模赋值 | \(a\ \%=\ b\) | \(a = a\ mod\ b\) |
乘方赋值 | \(a\ **\ b\) | \(a = a ^ b\) |
海象运算 | \(a\ :=\ b\) | Python3.8新增 |
位运算
含义 | 符号 | 含义 | 符号 |
---|---|---|---|
按位与 | \(\&\) | 按位或 | \(|\) |
按位异或 | \(\wedge\) | 按位取反 | \(\sim\) |
左移 | \(<<\) | 右移 | \(>>\) |
逻辑运算
含义 | Python表示 |
---|---|
与 | \(a\ and\ b\) |
或 | \(a\ or\ b\) |
非 | \(not\ a\) |
成员运算
Python表示 | 描述 |
---|---|
\(in\) | 如果在指定的序列中找到值返回\(True\),否则返回\(False\)。 |
\(not\ in\) | 如果在指定的序列中没有找到值返回\(True\),否则返回\(False\)。 |
10 in [10, 11, 12] # True
10 in ['10', '11', '12'] # False
'a' in ('a', 'b') # True
10 not in range(10) # True
[3] in [[1], [2], [3]] # True
身份运算
Python表示 | 描述 | 解释 |
---|---|---|
\(is\) | 判断两个标识符是否引用自同一对象 | \(x\ is\ y\),类似\(id(x)\ ==\ id(y)\) |
\(is\ not\) | 判断两个标识符是否引用自不同对象 | \(x\ is\ not\ y\),类似\(id(x)\ !=\ id(y)\) |
不推荐对int
、float
、str
类型使用成员运算符,比较关系尽量使用==
运算符。
d1, d2 = [2, 3], [2, 3]
d = d1 is d2
e1 = e2 = [3, 4, 5]
e = e1 is e2
print(d, e, [2, 3] is [2, 3]) # False, True, False
参考成员运算:
a = [3]
b = [[1], [2], [3]]
print(a in b) # True,说明面向列表的in运算并非是按照is运算作为判断标准的。
内置数学函数
-
abs(x) ''' 返回数的绝对值。 :param x: 整数、浮点数或者任何实现了__abs__()的对象。 :return: 绝对值;若x是复数,则返回模。 '''
-
all(iterable) ''' 若iterable的所有元素均为真值则返回True。 :param iterable: 可迭代对象。 ''' # 其实现可等价于: def all(iterable): for element in iterable: if not element: return False return True
-
any(iterable) ''' 若iterable中某个元素为真值则返回True。 :param iterable: 可迭代对象。 ''' # 其实现可等价于: def any(iterable): for element in iterable: if element: return True return False
-
存在三种形式,这里给出两种:max() ''' 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。 如果有多个最大元素,则此函数将返回第一个找到的。 '''
max(iterable, *, key = None) ''' :param iterable: 如果只提供了一个参数,则其必须是非空可迭代对象(例如列表、字符串)。 :param key: 可选关键字,指定排序函数。 ''' # 使用:max([1, 2, 3]) max(arg1, arg2, *args, key = None) # 使用:max(1, 2, 3)。
-
存在三种形式,类似于上述的min() ''' 返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。 如果有多个最小元素,则此函数将返回第一个找到的。 '''
max()
。 -
pow(base, exp, mod = None) ''' 计算(base ** exp) % mod。 :param base: 底数。 :param exp: 指数。 :param mod: 可选参数,对结果取模。
-
round(number, ndigits = None) ''' 返回number舍入到小数点后ndigits位精度的值。 :param ndigits: 可选参数,默认None(返回最接近输入值的整数)。 '''