Python3之基本数据类型总结

日期: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

接下来,我们讨论一下字典,其余参考上表即可。

  1. 字面量定义字典
score_dict = {
    "Chinese": 99,
    "Math": 100,
    "English": 98
}
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
  1. 键值对定义字典
score_dict = {}
score_dict["Chinese"] = 99
score_dict["Math"] = 100
score_dict["English"] = 98
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
  1. 内置函数dict()定义字典(一)---->“关键字key=value”
score_dict = dict(
    Chinese=99,
    Math=100,
    English=98
)
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
  1. 内置函数dict()定义字典(二)---->“列表+二元元组”
score_dict = dict(
    [("Chinese", 99), ("Math", 100), ("English", 98)]
)
print(score_dict)
# 控制台输出:
# {'Chinese': 99, 'Math': 100, 'English': 98}
  1. 内置函数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

发布了26 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35844043/article/details/103525714