python进阶知识梳理

138 阅读9分钟

python后期学习进阶的过程中,发现一些之前容易遗漏的知识点和自己遇到的bug出了关联,所以进阶之前有必要把这些细节整理清楚。新入门的话,可以试试我找到的案例,案例弄清楚相关概念印象会很深。

知识点一、基本数据类型

不可变:数字、字符串、元组

可变:集合、字典、列表

学习任何语言,都需要对这个语言中的数据类型的概念和操作方法有了解,熟练对每一种基本数据类型的操作后,下一步可以再组合生成一些复杂的数据类型,比如字典套列表,列表套字典,组合复杂的对象等。然后,在使用这些语言或者自定义框架的过程中,逐渐熟悉他自己的一些特性。
python语言学习学习这里数据类型的特性的时候,需要注意的只有一个细节,就是和深拷贝和浅拷贝有关的概念,受深浅拷贝的影响,你需要弄清楚当前代码的这个位置,这个变量的值到底是什么,因为变量作用域的关系,可能变量在传递的过程中,他的值根本不是你想象的那个样子。

1、数字类型

整型

与数学的整数一致,需要知道的是不同进制的表示方式,在处理一些特殊场景的数据类型的时候,需要认识这个数是几进制。还有就是整数没有长度和大小的限制。可以调用pow()函数求幂

进制类型示例
十进制00,01,-999
二进制±0b开头或者±0B开头,0是数字0
八进制±0o开头或者±0O开头,数字0和字母o
十六进制±0x开头或者±0X开头

布尔型

True或False,布尔类型的父类是int

浮点型

与实数一致,取值范围 [−10308,10308] ,精度 10−16 的程度。

如果是科学计算场景,注意可能会出现不确定尾数的问题,0.1+0.2=0.3000000004,这种不止是python,其他语言也有。可以用round()函数取整。

普通科学计算场景,可以用 a∗e∗b=a∗10b 的形式表示,

复数

复变函数涉及到空间变换的话,使用-a+bj,和数学中复数的相关概念一致。

容易出错的运算符:/ 除 // 整数除 % 取余 ** 幂运算[小数时表示开平方]

混合运算时会默认变成最宽的类型: 123+4.0=127.0,需要注意混合运算时是否出现了不确定尾数

数字类型的运算需要注意的概念和知识点大概就这么多,需要小心的就是类型转换的时候结果是否有问题吧。一些复杂的数字类型的运算,需要依赖第三方库,那就属于第三方库的经验分享,不属于基础知识的范围,如果遇上了合适的再另外开文章吧。

2、字符串

字符串是python基本数据类型的重中之重,很多应用场景下都非常有价值,我学习python后,新手阶段遇上的大多数需求,都是靠操作字符串灵活解决的。

2.1 字符串类型的表示

0或多个字符组成的序列类型。单双引号组合形成四种组成形式。

''' '''本身是字符串,如果不把这个字符串赋值给一个元素的情况,会把它当注释用。

使用[]可以获取元素:

  • 根据字符的序号对字符串进行索引,可以获取到指定元素

  • [M:N:K]根据步长对字符串进行切片

[M:N] 获取的是左闭右开的区间,K代表步长。M缺失表示至开头,N缺失表示至结尾。 比如[0:3]获取的就是:请输入。[0:9:3]获取的是:请带号。 [::-1]表示逆序输出字符串。

需要注意的是,[0:9:3]那种情况,那就按照步长取这个范围内所有能取到的数,再次强调是左闭右开

转义符表示,就是""来表示一些特殊符号,常用的一些有"\n"或者"\t"。注意字符串中出现\时,对应的符号是否会被转义。

2.2字符串操作符

a+b表示字符串a和b连接,注意是字符串a和字符串b,字符串a和整数b不行。

a*b表示复制b次a

a in b表示如果a是b的子串,返回True否则返回False

2.3字符串处理函数与方法

我就直接列最常用的了:

函数名称作用
len()获取长度
chr()unicode转字符
ord()字符转unicode
str()任意类型转字符串
str.split(a)将字符串中的字符按照a分割拆分放入列表,列表中不包括a
str.lower()或str.upper()字符串转大小写
str.count(a)统计字符串str中字符a出现的次数
str.replace(a, b)将字符串str中的所有a替换为b
str.strip(a)将str中左右两侧的字符a去除,如果a有多个字符,就所有字符全部去除
"".join(a)列表元素直接拼接为字符串
str.index(x)返回字符串str中字符x出现的序号
str.index(x,i,j)返回字符串str中从i位置开始到j位置中x第一次出现的位置

2.4 字符串类型格式化

格式化输出的话,标准方法就是str.format()了,但是这个并没有想象那么间接,还容易因为元素出现的顺序出问题,a = f"xxx{b}xx{c}x"的形式更多一些。

平时如果需要在字符串中直接插入一个元素的时候,经常会用到这种格式化方法,尤其是这个元素可能为None的时候,就会使用这种格式化方法。因为"+"是连接字符串的, "+"无法连接一个None类型和一个字符串

3、元组

使用()或者tuple()函数来创建,属于序列类型,字符串的索引,切片,index, len,count方法仍然适用。元组不可被修改,所以切片和索引的结果进入的是一个新的空间

这个小括号是可缺省的:★★★★★

注意:这也代表你需要注意一个事情,你在调用一个不是自己写的函数的时候,尤其是官方库,你往里面传参,然后你要传的还是元组类型,你就要确定这个元组类型被赋值到了形参列表的哪个元素上。

比如 调用一个函数

f(a,b,c=None)

如果你只是想实现

f(a=4, b=(4,5))

但是,你又偷懒这样写效果就完全不一样了

f(4,4,5)

这种类型的特点就是创建后不能被修改。

函数的返回值经常以元组的形式返回,需要注意的是,返回的元组的长度,元组中元素出现的顺序,是否是自己期望的,是否满足接收要求等等,如果有可能用不到函数的返回值,可以用"_"接收。

4、集合

与数学的集合类型一致,不可修改,无序,元素唯一。用{}或set()创建。建立空集合必须用set()。数据去重用set()。

集合的应用类型相对狭窄一些,集合需要了解的就是操作符和处理方法。

集合的操作符: | (交), -(差),&(并), ^(补,非相同元素)

集合的处理函数: set.add(x) 增加x, set.discard(x)移除元素x, set.clear()清空, set.pop()随机返回元素,

set.copy()生成副本

5、字典

python中的字典类型是一个可以转为json的格式,是无序的,用{}或dict()创建,每个元素都是一个键值对。

操作名称作用
del dict[k]删除字典dict中键k对应的值
dict.keys()获取字典中的所有键的信息
dict.values()获取字典中所有值的信息
dict.items()获取字典中所有键值对的信息
dict.get(x)如果字典dict存在键x,返回值,如果不存在,返回空
dict.pop(x)如果字典dict存在键x,取出,如果不存在,返回空
dict.clear()清空dict
json.loads(dict)字典转json
json.dumps(dict)字典解析为字符串,用于处理网络中的json

6、列表

与元组类型相似,内部可变。用[]或list()创建。

操作方法:

方法名称作用
ls[i]=x将列表ls的第i元素替换为x
ls[i:j:k]=lt将列表ls进行切片后的部分替换为lt
del ls[i]删除列表ls中的第i个元素
del ls[i:j:k]删除列表中从i开始到j的步长k的元素
ls += lt将列表lt增加到列表ls中
ls *= n列表元素重复n次
ls.append(x)在列表ls末尾添加元素x
ls.clear()删除列表ls中的所有元素
ls.copy()生成一个新列表,复制ls中的所有元素
ls.insert(i,x)在列表ls的第i个位置后插入元素x
ls.pop(i)将列表ls第i位置元素取出并删除
ls.remove(x)将列表ls中出现的第一个x删除
ls.reverse()将列表ls的元素反转

总结: 一些简单的功能性函数,很多人猜也能猜到函数名是什么,一些复杂的功能性函数,真到了用的时候,很多也只能靠翻阅文档,或者在自己的应用场景遇上了会记忆一波。靠翻书翻博客学那些东西,......,博客最大的作用感觉还是供写博客的人自己整理知识,或者把博客当作字典翻阅罢了。

练习案例

深度学习领域有一个数据集的概念,目标检测领域的coco格式的数据集,是以json格式存储的。尝试在网上找到一个coco格式的数据集,尝试把它按7:2:1的方式拆分出训练集,验证集和测试集。
关联的知识点:

  • python深浅拷贝
  • json库读取文件应用
  • 字典类型和列表类型操作的熟悉