深入理解Python中的基本数据类型

来源:互联网 发布:xcode怎么编写python 编辑:程序博客网 时间:2024/05/29 16:40

博客核心内容:


1、进制、编码、解码的相关概念
2、类和对象的相关概念
3、基本类型之字符串功能介绍
4、基本类型之整型功能介绍
5、基本类型之布尔类型介绍
6、基本类型之列表类型介绍
7、range和enumerate用法介绍
8、基本类型之元组类型介绍
9、基本类型之dict字典类型介绍
10、基本类型之set集合类型介绍
11、Python中的列表生成式


1、进制、编码、解码的相关概念

本篇博客的重点在于介绍Python中的基本数据类型,但是文章的开篇我们先介绍一下进制、编码、解码的相关概念。
所谓n进制就是逢n进1,所以二进制就是逢2进1,8进制就是逢8进1,16进制就是逢16进1,对于不同进制之间的关系,大家只要记住一句话就可以了:数字是本质,进制只是不同的表现形式,下面是常用的进制对照表。
这里写图片描述
正如上图所示:
二进制位与八进制位、十六进制位之间的关系:一个8进制位要用3个二进制位进行表示,一个16进制位要用4个二进制位进行表示。
来一段代码:

value = 10print("10的十进制位表现形式:%d" % value)print("10的八进制位表现形式:%o" % value)print("10的十六进制进制位表现形式:%X" % value)

运行结果:

10的十进制位表现形式:1010的八进制位表现形式:1210的十六进制进制位表现形式:A

通过上面的程序,我们很容易理解,进制只不过是数字的不同表现形式而已。
对于我们的计算机来说,只能够识别出0或者1,即所谓的二进制,计算机中存储的任何数据在计算机的底层都是以0或者1来进行存储的,但是同样的一个数据,指定的编码格式不同,在计算机中存储的二进制形式也不相同。比如同样的一个汉字,如果这个汉字对应的编码格式是utf-8,那么这个汉字将会对应3个字节(即24位)在计算机的底层进行存储,如果这个汉字对应的编码格式是gbk,那么这个汉字将会对应2个字节(即16位)在计算机的底层进行存储。
我们编程的目的是让计算机干活,而编程的结果说白了只是一堆字符,也就是说我们编程最终要实现的是:一堆字符驱动计算机干活,所以必须经过一个过程:
字符——–(翻译过程)——->数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。
字符编码的概念:即一个字符在计算的底层到底以哪种二进制形式来进行存储,如我们常见的ASCII、utf-8、gbk编码等等。所谓解码就是一个数据以哪种格式进行解析,所以本地文件的字符以哪种编码格式来进行存储,我们就应该用哪种编码格式来解析文件即可,进而避免出现乱码的问题。
为了让大家容易理解,下面用一个例子展示进制、编码和解码的概念。
这里写图片描述
从上面的示意图我们看出:我们的数据在计算机的底层都是以二进制的形式来进行存储的(可以对应多种编码格式进行存储),当我们在读取文件的时候得到的首先是0、1串,然后在以指定的编码格式解析成对应的数据。
那么在Python当中我们如何获取一个文件的01呢,下面是代码示例,其中rb代表以二进制的形式打开这个文件并读取内容。(注意:在结果中我们是以16进制形式看到的01串)

f1 = open("db","rb")data = f1.read()print(data)

运行结果:

b'lijie\xe6\x9d\x8e\xe6\x9d\xb0'

所以我们对文件的操作本质上都是基于编码对文件的操作。
具体详情:http://blog.csdn.net/a2011480169/article/details/71250396
编码的详情:http://blog.csdn.net/a2011480169/article/details/54344632

2、类和对象的相关概念

我们在Python中常用的一些基本类型主要包括:字符串str、整数int、列表list以及字典dict,为了让大家更清楚的了解这些类型的本质,我们先介绍两个概念:类和对象。
1>把一类事物的静态属性和动态可以执行的操作组合在一起所得到的这个概念就是类
2>类的一个个体就是对象,对象是具体的,实实在在的事物 。
这里写图片描述
所以,我们常说的str、int、dict和list本质上就是类,我们创建的具体的字符串、具体的整数、具体的字典和列表实际上就是由类构造出的对象。

3、基本类型之字符串功能介绍

上面谈到了类和对象的相关概念,在这些类中str字符串类无疑是最重要的一个类,Str类对象表示不可修改的编码字符串、Str类对象一旦创建就不可在更改,即只要创建一个字符串,就会重新分配一块内存空间,因此如果经常对字符串的内容进行修改而使用Str类的话,就会造成内存空间以及时间的浪费,简单来说就一句话,str类对象是不可修改的
下面将str类中常用的方法进行列出:


这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


在上面这44个方法中经常要用到的包含11个:
这里写图片描述
下面进行部分代码示例:

name = " AlexEricAlex "print(name.upper())print(name.lower())print(name.split("E"))print(name.find("e"))print(name.strip())print(name.startswith("Al"))print(name.endswith("ex"))print(name.replace("ex","EX"))value = "李杰"print("一个汉字对应utf-8编码格式时对应3个字节,如下所示:")print(value.encode(encoding="utf-8"))user_info = "我的名字是:{0},我的名字是:{1}"print(user_info.format("Alex",25))user_info_list = ["Alex","123123","1"]print("****".join(user_info_list))

运行结果:

 ALEXERICALEX  alexericalex [' Alex', 'ricAlex ']3AlexEricAlexFalseFalse AlEXEricAlEX 一个汉字对应utf-8编码格式时对应3个字节,如下所示:b'\xe6\x9d\x8e\xe6\x9d\xb0'我的名字是:Alex,我的名字是:25Alex****123123****1

除此之外,str类中还有一些额外的方法:
这里写图片描述
这里不再多余阐述。

4、基本类型之整型功能介绍

下面介绍int类型常用的一些方法,相比于str类型,方法要少很多。


这里写图片描述


相关程序:

num = 15print("将int变量15转化为对应的位表示:")print(bin(num))print("求整型数字15用二进制表示时对应的最小二进制位数:")print(num.bit_length())print("获取当前数字15的字节表示:")print(num.to_bytes(1,"big"))

运行结果:

int变量15转化为对应的位表示:0b1111求整型数字15用二进制表示时对应的最小二进制位数:4获取当前数字15的字节表示:b'\x0f'
5、基本类型之布尔功能介绍

在基本类型当中,布尔类型是最简单的一种。布尔类型的数值分为两种:True和False,其具体用法只需要记住以下几点即可:
这里写图片描述
程序示例:

user_list = ""if user_list:    print("hello")else:    pass

在上面的程序中,如果user_list的数值是True,则打印出hello,否则的话不做任何处理,因为user_list的数值是空,所以布尔数值为False,所以本程序不做任何的处理。

6、基本类型之列表功能介绍

在介绍list列表的方法之前,我们先介绍一下容器的相关概念,因为列表本质上就是一个容器。在Python当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 。
List列表:由于内部存储结构的特点,List集合中区分元素的顺序,且允许包含重复的元素。List集合中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素—有序,容器中的元素可以重复。List列表示一个可变对象
下面将List列表的常用方法进行列出:


这里写图片描述
这里写图片描述


代码部分示例:

li = ["alex", "eric", "rain","dongdong","youyou"]print("删除列表中的eric:")li.remove("eric")print(li)print("删除列表中第二个位置的对象,并返回其数值:")value = li.pop(1)print(value)print(li)print("删除列表中第一个和第二个位置的元素:")del li[0:2]print(li)

运行结果:

删除列表中的eric:['alex', 'rain', 'dongdong', 'youyou']删除列表中第二个位置的对象,并返回其数值:rain['alex', 'dongdong', 'youyou']删除列表中第一个和第二个位置的元素:['youyou']
7、range和enumerate用法的介绍

range()和enumerate()这两个函数在很多的场合都有使用,具体用法如下所示:
这里写图片描述
range()部分代码示例:

li = ["alex", "eric", "rain", "dongdong", "youyou"]for index in range(0, len(li)):    print(index,li[index])

运行结果:

0 alex1 eric2 rain3 dongdong4 youyou

enumerate()部分代码示例:

li = ["alex", "eric", "rain", "dongdong", "youyou"]for key,value in enumerate(li,1):    print(key,value)index = input("请输入你选择的老师:")index = int(index)print(li[index-1])

运行结果:

1 alex2 eric3 rain4 dongdong5 youyou请输入你选择的老师:2eric
8、基本类型之元组类型的介绍

当年我在学习Scala的过程中就已经接触到了元组,Scala中元组的相关概念:
(1)在元组当中可以存放很多个数据,元组中数据的访问是从下标1开始的.
(2)元组是很重要的,因为对于一个函数或算子来说,有可能会返回几个值,我们常用tuple中定义的几个变量来接受
函数返回的数值。
不同于Scala,在Python当中元组的下表是从下标0开始的,Python中元组的相关概念:
(1)元组是一个特殊的列表,元组中的元素创建完之后,就不能再被更改,即元组中的元素不能添加、不能删除、不能
更新,元组是一个不能被修改的类对象(集合),即不可变的。
(2)元组中最后一个元素的后面要记得加逗号。(潜规则)
元组中常用的方法总结如下:
这里写图片描述
部分代码示例:

user_tuple = ("Alex","123123",["TV","eating","Swimmng"],3,)user_tuple[2][2] = "shopping"print(user_tuple)

运行结果:

('Alex', '123123', ['TV', 'eating', 'shopping'], 3)

但是大家注意一下,下面的例子是错误的:

user_tuple = ("Alex","123123",("TV","eating","Swimmng"),3,)user_tuple[2][2] = "shopping"user_tuple = ("Alex","123123",("TV","eating","Swimmng"),3,)user_tuple[2] = ("Eric","123123",4)

两种写法想继会报错:

TypeError: 'tuple' object does not support item assignment

元组归根结底是一个不可变的类对象实例。

9、基本类型之字典类型的介绍

接下来介绍另外一种容器,就是Python中的字典,Python中的字典类似于Java中的映射Map,至少在效果上我认为是相同的,在这里先扯一下Java中的映射Map的概念:
Map映射:由于内部存储结构的特点,映射中不能包含重复的键值,每个键最多只能映射一个值,否则会出现覆盖的情况,Map是一种把键对象和值对象进行映射的集合,即Map容器中既要存放数据本身,也要存放关键字。
Python中的dict本身是一种可变对象,其常用的方法如下所示:


这里写图片描述
这里写图片描述
这里写图片描述


部分代码功能示例:

user_info = {    "name": "Alex",    "pass_wd": "123123",    "times": 1}print("根据key获取相应的value数值:")value1 = user_info.get("name")print(value1)print("删除某个key对应的value数值,并获取其数值")value2 = user_info.pop("name")print(value2)print(user_info)print("向列表中增加某个键值对")user_info.setdefault("passison","singing")print(user_info)

运行结果:

根据key获取相应的value数值:Alex删除某个key对应的value数值,并获取其数值Alex{'pass_wd': '123123', 'times': 1}向列表中增加某个键值对{'pass_wd': '123123', 'times': 1, 'passison': 'singing'}
10、基本类型之set集合类型的介绍

set集合:由于内部存储结构的特点,set集合中不区分元素的顺序,不允许出现重复的元素,set容器可以与数学中的集合概念相对应,相同的元素不会被加入。
set集合常用的方法介绍:


这里写图片描述
这里写图片描述
这里写图片描述


部分代码示例:

user_info1 = {"Alex","123123",1}user_info2 = {"Alex","123123",2}print("s1中含有,s2中不含有的元素:")user_info3 = user_info1.difference(user_info2)print(user_info3)print("s1中含有s2中不含有的元素,s2中含有s1中不含有的元素:")user_info4 = user_info1.symmetric_difference(user_info2)print(user_info4)

运行结果:

s1中含有,s2中不含有的元素:{1}s1中含有s2中不含有的元素,s2中含有s1中不含有的元素:{1, 2}
11、Python中的列表生成式
#!/usr/bin/python# -*- coding:utf-8 -*-#列表生成的方式1user_list = []for item in range(10):    user_list.append(item)print(user_list)#列表生成的方式2user_list2 = ['%s' %i for i in range(10)]print(user_list2)#列表生成式user_list3 = [i for i in range(10) if i > 5]print(user_list3)user_list4 = [i for i in range(10) if i>3 and i < 10]print(user_list4)#if的后面不能加else

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'][6, 7, 8, 9][4, 5, 6, 7, 8, 9]Process finished with exit code 0

OK,Python中的基本数据类型就介绍到这里,如有问题,欢迎留言指正!

0 0
原创粉丝点击