日期:2019年12月15日
作者:Commas
注释:学习就是为了忘记,总结一下python3的基本数据类型相关的知识。
如果您想了解更多有关Python的知识,那么请点《我的Python目录》
一、变量在内存中的存储
变量
和数据
是分开存储的,数据
保存在内存中的一个位置,而变量
保存着数据所在内存中的地址。如下图赋值语句:a = 1
所示,我们看到的是虚线左边的变量名a,我们操作的数据是存在虚线右边id为140717091251024的内存中的值。
变量:
一个标识符,保存着指向数据所在内存中的地址,可以理解为一个指针,也可以理解为一个数据的标签(用这个标签,我们就可以获得标签对应的数据值),用内置函数id()
可以查看内存地址。可变类型:
数据发生改变,但是内存地址没有发生了改变的数据类型。不可变类型:
数据发生改变,内存地址同样发生了改变的数据类型。
分类 | 数据类型 |
---|---|
可变类型 | 列表、字典、集合(非冻结结合) |
不可变类型 | 数字类型(int,bool,float等)、字符串、元组、冻结集合 |
二、内置函数(1)
内置函数 | 说明 |
---|---|
len | 获取给定参数的长度 或者项目个数 |
min | 获取给定参数的最小值 |
max | 获取给定参数的最大值 |
sum | 获取给定参数的合计值(求和) |
del | 删除变量,该变量将不可被访问 |
之前在介绍每一个基本数据类型的时候,都没有怎么去讲这些知识,不是因为这些知识不重要,而是这些函数是Python的内置函数,并非每个基本数据类型的方法,写在一起怕有所混淆。
那么这4个函数,分别支持哪些基本数据类型呢?奈何我这个人比较懒,不喜欢写重复代码,于是乎,就写了一个通用的函数
用来测试支持的情况咯,代码如下:
def print_exec_result(test_built_in_function, test_param):
"""
测试test_built_in_function内置函数是否支持test_param数据类型的数据
:param test_built_in_function: 字符串,内置函数名,如'max'
:param test_param:需要测试的数据类型的数据
"""
command = "print({}({}))".format(test_built_in_function, test_param)
# print(command)
try:
print("\t【{}】的结果:".format(test_built_in_function), end="")
exec(command)
except Exception as e:
print("{}()的参数不支持{}的数据类型,详情:{}".format(test_built_in_function, type(test_param), e))
所谓工欲善其事,必先利其器。现在器已经准备好,那么我们就来做事,开始测试这4个函数对列表、元组、字典、字符串、集合和数字(Number)
等6个基本数据类型的支持情况吧:
one_list = [1, 2, 3]
one_tuple = (1, 2, 3)
one_dict = {"c": 1, "b": 2, "a": 3}
one_string = "123abc"
one_set = {1, 2, 3}
one_int = 123
data_list = [one_list, one_tuple, one_dict, one_string, one_set, one_int]
cmd_list = ['len', 'min', 'max', 'sum']
for i, data in enumerate(data_list):
print("({})、数据类型为{}的数据{}测试结果如下:".format(i, type(data), data))
for cmd in cmd_list:
print_exec_result(cmd, data)
控制台输出如下:
(0)、数据类型为<class ‘list’>的数据[1, 2, 3]测试结果如下:
【len】的结果:3
【min】的结果:1
【max】的结果:3
【sum】的结果:6
(1)、数据类型为<class ‘tuple’>的数据(1, 2, 3)测试结果如下:
【len】的结果:3
【min】的结果:1
【max】的结果:3
【sum】的结果:6
(2)、数据类型为<class ‘dict’>的数据{‘c’: 1, ‘b’: 2, ‘a’: 3}测试结果如下:
【len】的结果:3
【min】的结果:a
【max】的结果:c
【sum】的结果:sum()的参数不支持<class ‘dict’>的数据类型,详情:unsupported operand type(s) for +: ‘int’ and ‘str’
(3)、数据类型为<class ‘str’>的数据123abc测试结果如下:
【len】的结果:6
【min】的结果:1
【max】的结果:c
【sum】的结果:sum()的参数不支持<class ‘str’>的数据类型,详情:unsupported operand type(s) for +: ‘int’ and ‘str’
(4)、数据类型为<class ‘set’>的数据{1, 2, 3}测试结果如下:
【len】的结果:3
【min】的结果:1
【max】的结果:3
【sum】的结果:6
(5)、数据类型为<class ‘int’>的数据123测试结果如下:
【len】的结果:len()的参数不支持<class ‘int’>的数据类型,详情:object of type ‘int’ has no len()
【min】的结果:min()的参数不支持<class ‘int’>的数据类型,详情:‘int’ object is not iterable
【max】的结果:max()的参数不支持<class ‘int’>的数据类型,详情:‘int’ object is not iterable
【sum】的结果:sum()的参数不支持<class ‘int’>的数据类型,详情:‘int’ object is not iterable
我们可以下结论啦:
内置函数built-in | 列表List | 元组Tuple | 字典Dictionary | 字符串String | 集合Set | 数字Number |
---|---|---|---|---|---|---|
len | 列表元素个数 | 元组元素个数 | 字典键值对个数 | 字符串长度 | 集合元素个数 | 不支持 |
min | 列表元素最小值 | 元组元素最小值 | 字典键的最小值 | 字符串元素最小值 | 集合元素最小值 | 不支持 |
max | 列表元素最大值 | 元组元素最大值 | 字典键的最大值 | 字符串元素最大值 | 集合元素最大值 | 不支持 |
sum | 列表元素合计值 | 元组元素合计值 | 不支持 | 不支持 | 集合元素合计值 | 不支持 |
三、内置函数(2)
内置函数 | 说明 |
---|---|
list | 强制转换并获得一个新的列表对象 |
tuple | 强制转换并获得一个新的元组对象 |
dict | 强制转换并获得一个新的字典对象 |
set | 强制转换并获得一个新的集合对象 |
frozenset | 强制转换并获得一个新的冻结的 集合对象,冻结后的集合不能再添加或删除任何元素 |
str | 强制转换并获得一个新的字符串对象 |
int | 将一个字符串或数字转换为整型 |
float | 将整数和字符串转换成浮点数 |
bool | 将给定参数转换为布尔类型,如果没有参数,返回 False |
接下来,我们讨论一下字典
,其余参考上表即可。
- 字面量定义字典
score_dict = {
"Chinese": 99,
"Math": 100,
"English": 98
}
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
- 键值对定义字典
score_dict = {}
score_dict["Chinese"] = 99
score_dict["Math"] = 100
score_dict["English"] = 98
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
- 内置函数dict()定义字典(一)---->
“关键字key=value”
score_dict = dict(
Chinese=99,
Math=100,
English=98
)
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
- 内置函数dict()定义字典(二)---->
“列表+二元元组”
score_dict = dict(
[("Chinese", 99), ("Math", 100), ("English", 98)]
)
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
- 内置函数dict()定义字典(三)---->
“zip()内置函数”
score_dict = dict(
zip(
["Chinese", "Math", "English"],
[99, 100, 98]
)
)
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/103525714