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(返回最接近输入值的整数)。 '''

浙公网安备 33010602011771号