Python学习笔记
不推荐将python作为主力语言,但推荐作为一个辅助语言,用于日常的一些小的任务
python目前主要的应用场景:
1.机器学习,人工智能
2.爬虫
3.数据分析
4.自动化,运维
5.web后端
基础知识
- python是解释型语言、没有编译环节。
- python一切皆对象,所有对象都有一个布尔值
IDLE 是python自带的简单的开发环境
Python 3.8 是交互式命令行程序
Python 3.8 Manuals 是官方技术文档
Python 3.8 Module Docs 是已安装模块文档
- pycharm(一种Python IDE)安装地址:https://www.runoob.com/w3cnote/pycharm-windows-install.html
- Spyder(一种Python IDE)【更适合用于数据分析处理】安装地址:https://pypi.org/project/spyder/
- 需要Python解释器,目前本电脑所装version为Python 3.8.2
字符编码:
最早ASCII码:8 bit
中国推出80后GB2312:7445个
中国推出90后GBK:一个中文占两个字节
中国推出00后GB18030:两万多个
避免打架推出全世界统一标准Unicode:规定使用两个字节(16 bit)表示,包含了全世界的字符
UTF-8(是Unicode的实现):规定英文使用1个字节(8 bit)表示,中文使用3个字节(24 bit)表示tips:ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。你的美国同事Bob的系统中ANSI编码其实是ASCII编码(ASCII编码不能表示汉字,所以汉字为乱码),而你的系统中(“汉字”正常显示)ANSI编码其实是GBK编码,而韩文系统中(“???”正常显示)ANSI编码其实是EUC-KR编码。
进制英文名:
Binary:二进制 ~ 前缀0b ~ 后缀B
Octal:八进制 ~ 前缀0o ~ 后缀O
Decimal:十进制 ~ 前缀\(默认的十进制) ~ 后缀D
Hexadecimal:十六进制 ~ 前缀0x ~ 后缀H
小知识点:
- 保留字(即关键字)
- 三引号定义的字符串可以分布在连续的多行(注意:与回车、\符号效果不同)
- 三引号也可用作多行注释
- input()输入值的类型为str
#从键盘输入两个数,并输出两数和
a=int(input("请输入一个加数:"))
b=int(input('请输入另一个加数:'))
print(type(a),type(b))
print(a+b)
数据类型转换
- 数据类型转换时,str转换成int类型,字符串必须为数字串(整数),非数字串不允许转换,转换方法:int(**)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jjddaSMI-1624014059237)(./笔记截图/QQ截图20210401102514.png " ")]
算术运算符:
+
-
*
/
无需说明
%
取余
**
幂运算
//
整除,一正一负向下取整[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqzJeQng-1624014059238)(./笔记截图/QQ截图20210319120916.png “算术运算符 图”)]
赋值运算符:
- 执行顺序:从右往左
支持链式赋值,a=b=c=20
支持参数赋值,+=、-=、*=、/=、//=、%=
支持系列解包赋值,a,b,c=20,30,40
此处牛逼:
#使用系列解包赋值,交换两个变量的值
a,b=10,20
print('交换前变量的值:',a,b)
a,b=b,a
print('交换之后的变量的值:',a,b)
比较运算符:
- 比较运算符的结果为bool型
一个 = 称为赋值运算符, ==称为比较运算符
一个变量由三部分组成:标识(id),类型>(type),值(value)
==
比较的是值
is
、is not
比较的是对象的标识
布尔运算符:
- and
此处牛逼:
score>=90 and score<=100
在Python中可以写成以下形式:
90<=score<=100
- or
- not 注意取反不是!
- in
- not in
#布尔运算符之in / not in
s='hello world'
print('w' in s)
输出为true
print('k' not in s)
输出为true
位运算符:
- 位运算电脑运算速度更快
位与
&
位或|
左移位运算符<<
,高位溢出舍弃,低位补零
右移位运算符>>
,低位溢出舍弃,高位补零
运算符优先级:
()
算术运算符
位运算符
比较运算符
布尔运算符
赋值运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVbDzfkZ-1624014059240)(./笔记截图/QQ截图20210319164542.png “算术运算符 图”)]
对象的布尔值:
- 以下对象的布尔值都是False:
-
- False
-
- 数值0
-
- None
-
- 空字符串
-
- 空列表
[]
/list()
- 空列表
-
- 空元组
()
/tuple()
- 空元组
-
- 空字典
{}
/dict()
- 空字典
-
- 空集合
set()
- 空集合
- 其他对象的布尔值皆为True
条件表达式(双分支结构的简写):
- 语法结构:x if 判断条件 else y
此处牛逼:
‘’‘从键盘键入两个整数,比较两个整数的大小’’’
num_a=int(input('请输入第一个整数:'))
num_b=int(input('请输入第二个整数:'))
print( str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str(num_a)+'小于'+str(num_b) )
pass语句:
- pass语句什么都不做,只是一个占位符,用在语法上需要语句的地方
内置函数range():
- 此前已经学习过的内置函数有:input()、print()
- 什么是内置函数:就是前面不需要加任何前缀就可以直接使用的函数
- 用于生成一个整数序列
创建range对象的三种方式:
- range(stop)
- range(start,stop)
- range(start,stop,step)
- 返回值是一个迭代器对象
- range类型的优点:所有range对象占用的内存空间都是一样的
- 用in与not in判断整数序列中是否存在指定整数
循环结构:
循环的分类:
- while
- for -in
while循环(用于循环次数不确定)
-
语法结构(与if类似):
while 条件表达式:条件执行体(循环体)
for-in循环(用于循环次数确定,进行迭代)
-
in 表达从(字符串、序列等)中依次取值,又称遍历,要求遍历对象必须是可迭代对象
-
语法结构:
for 自定义的变量 in 可迭代对象:循环体
-
如果在循环体中不需要使用到自定义变量,可将自定义变量写为"_"
列表
- 创建方法:
1.
[]
2.使用内置函数list(['hello','world'])
- 特点:对数据进行整体操作,相当于其他语言中的数组
1.按顺序有序排序
2.索引映射唯一数据
3.可存储重复数据
4.任意数据类型混存
5.可根据需要动态分配空间和回收内存
- 获取指定元素的索引:
lst=['hello','world',98,'hello']
print(lst.index('hello',1,4))
#3
- 列表的查询操作:
lst=[10,20,30,40,50,60,70,80]
print(lst[start:stop:step])
-
判断及遍历: in/ not in
-
列表元素的添加操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vT85a0K0-1624014059241)(./笔记截图/QQ截图20210320103853.png “列表增加操作 图”)]
lst.insert(位置,添加的元素)
注:切片操作产生新的列表对象
不产生新的列表对象:lst[2:4]=[]
- 列表元素的删除操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGQv2BKd-1624014059247)(./笔记截图/QQ截图20210320104824.png “列表删除操作 图”)]
- 列表元素的修改操作:
lst[2:4]=[100,200,300,400]
- 列表元素排序操作:
1.升序
lst.sort()
或者 降序lst.sort(reverse=true)
注意:不产生新的列表对象
2.升序new_lst=sorted(lst)
或者 降序desc_lst=sorted(lst,reverse=true)
注意:产生新的列表对象
- 列表生成式:
lst=[i*2 for i in range(1,11)]
字典
- 特点:
1.与列表一样是可变序列
2.列表是单身狗,字典是夫妻档(键值对 key->value) hash函数决定 键必须是不可变序列->字符串
3.列表是有序的,字典是无序的
4.可以根据需要动态地伸缩
5.字典会浪费较大的内存,是一种使用空间换时间的数据结构
- 创建方法:
1.
{}
可表示空字典,不可表示空集合
scores={'张三':100,'李四':98,'王五':45}
2.使用内置函数dict(name='jack', age=20)
- 元素获取(查询):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5p1djsE-1624014059248)(./笔记截图/QQ截图20210320163124.png " ")]
print(scores.get('麻七',99))
- 字典元素的增删改:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDt7DiKm-1624014059249)(./笔记截图/QQ截图20210320163611.png " ")]
注意删除元素写法:del scores['张三']
- 获取字典视图的三个方法:
1.
keys()
–获取字典中的所有key
2.values()
–获取字典中的所有value
3.items()
–获取字典中所有key,value对,转换之后的列表元素是由元组组成的
[('张三',100),('李四',98),('王五',45)]
- 字典生成式:
使用内置函数zip()
items=['Fruits','Books','Others']
prices=[96,78,85]
d={item.upper():price for item,price in zip(items,prices)}
注:item.upper是将字符串中所有字符转成大写
元组
- 特点:
元组是*不可变序列***(不可变的列表) , 但有序
在多任务环境下,同时操作对象时不需要加锁
因此,在程序中尽量使用不可变序列
- 元组的创建方式:
1.直接小括号
t=('Python','hello',90)
注:括号可省略
2.使用内置函数tuple()
t=tuple(('Python','hello',90))
注:只包含一个元组的元素需要使用逗号和小括号
t=(10, )
集合
- 特点:
1.与列表字典一样都属于可变类型的序列,但 无序
2.集合是 没有value的字典(存储键,所以不允许重复)
- 创建方式:
1.
{}
里面必须有元素,不可表示空集合
scores={'张三','李四','王五'}
2.使用内置函数set()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z665cf42-1624014059251)(./笔记截图/QQ截图20210320195911.png " ")]
- 集合的相关操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZf26qIo-1624014059254)(./笔记截图/QQ截图20210320200631.png " ")]
注:discard()相比remove()元素不存在时不会抛出异常
注:pop()没有参数
- 集合间的关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NQ8gMcBh-1624014059255)(./笔记截图/QQ截图20210320201631.png " ")]
- 集合的数学操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oAae7N7-1624014059256)(./笔记截图/QQ截图20210320202455.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koy2Pfep-1624014059257)(./笔记截图/QQ截图20210320202615.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Az9M2kIf-1624014059260)(./笔记截图/QQ截图20210320202724.png " ")]
注:对称差集与交集相反
- 集合生成式:
{i*2 for i in range(1,11)}
注:与列表生成式就差个{}
[]
列表、字典、元组、集合总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqkeXcDY-1624014059261)(./笔记截图/QQ截图20210320203640.png " ")]
字符串
字符串的驻留机制:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIeJXMEV-1624014059263)(./笔记截图/QQ截图20210320214257.png " ")]
- 字符串驻留机制的优缺点:
避免频繁的创建和销毁,提升效率节约空间
字符串拼接时建议使用str类型的join方法,而非+,因为只new一次对象,效率比+高
字符串的常用操作:
- 查询操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FTIfUfxU-1624014059264)(./笔记截图/QQ截图20210320215550.png " ")]
- 大小写转换操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fBxmsgSG-1624014059265)(./笔记截图/QQ截图20210320215742.png " ")]
注:操作后id会变
- 对齐操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPwvp3fG-1624014059266)(./笔记截图/QQ截图20210321084131.png " ")]
- 劈分操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrO7zjsA-1624014059267)(./笔记截图/QQ截图20210321084710.png " ")]
注:指定劈分符的时候sep=
不写也可
- 判断字符串操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YQdgheQr-1624014059269)(./笔记截图/QQ截图20210321090904.png " ")]
注:合法标识符是字母、数字、下划线
注:Python 可以将中文字算作字母(合法标识符),甚至可以当作变量使用
王玉豪=123
print(王玉豪,type(王玉豪))
#结果为:123 <class ‘int’>
十进制必须是123
数字可以是1234、一二三四、ⅠⅡⅢⅣ(罗马数字)
- 字符串操作的其他方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mA4M94CZ-1624014059270)(./笔记截图/QQ截图20210321091539.png " ")]
注:print('*'.join('python'))
#结果为:p*y*t*h*o*n
- 字符串的比较操作:
内置函数:
ord('a')
#结果为:97
内置函数:chr('97')
#结果为:a
上面两个内置函数是相反的,且中文也可print(ord('王'))
#结果为:29579
- 格式化字符串:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TAMIlQyd-1624014059271)(./笔记截图/QQ截图20210321111817.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQ42iGRR-1624014059272)(./笔记截图/QQ截图20210321112201.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGDEa684-1624014059274)(./笔记截图/QQ截图20210321113106.png " ")]
- 字符串的编码转换:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUY3tbD8-1624014059275)(./笔记截图/QQ截图20210321113847.png " ")]
注:GBK、UTF-8不区分大小写
函数
- 函数调用的参数传递:
位置参数:实参位置和形参保持一致,按形参声明的先后顺序一一赋值
此处是python独有(目前已知与C++、Java不相同):
关键字实参:调用函数的时候以 形参=实参 的方式来传参, 这个时候实参的顺序无所谓
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RFqkb82-1624014059277)(./笔记截图/QQ截图20210321151334.png " ")]
注:形参可设定默认值
- 函数参数传递内存分析:
如果是不可变对象,在函数体的修改不会影响实参的值
如果是可变对象,在函数体的修改会影响到实参的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bns18aW-1624014059278)(./笔记截图/QQ截图20210321152837.png " ")]
- 函数的返回值:
1.如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】 return可以省略不写
2.函数的返回值,如果是1个,直接返回类型
3.函数的返回值,如果是多个,返回的结果为元组
- 函数的参数定义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLWycn16-1624014059280)(./笔记截图/QQ截图20210321162611.png " ")]
- 函数参数总结:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63dRZ2uZ-1624014059281)(./笔记截图/QQ截图20210321164830.png " ")]
红方框解释:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emiQl3Oh-1624014059283)(./笔记截图/QQ截图20210321165518.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCQneQyn-1624014059284)(./笔记截图/QQ截图20210321165533.png " ")]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-43oh7hxc-1624014059285)(./笔记截图/QQ截图20210321165935.png " ")]
变量作用域:
使用
global
声明为全局变量
递归函数:我调用我自己
Python的异常处理机制
- try…except结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-450QPp35-1624014059286)(./笔记截图/QQ截图20210322201846.png " ")]
- try…except…else结构
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDcijgRU-1624014059287)(./笔记截图/QQ截图20210322202217.png " ")]
- try…except…else…finally结构
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BhPjEEdZ-1624014059289)(./笔记截图/QQ截图20210322202651.png " ")]
- traceback模块:
用于打印异常信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KrTHWLpl-1624014059290)(./笔记截图/QQ截图20210322203815.png " ")]
python中常见的异常类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-izuqwOwC-1624014059291)(./笔记截图/QQ截图20210322203233.png " ")]
类
找对象不积极思想有问题
- 类名的取名规范(程序员默认规则):
class Student:
类名由一个或多个单词组成,每个单词的首字母大写,其余小写
- 类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLNGCqYu-1624014059292)(./笔记截图/QQ截图20210324170041.png " ")]
此处的局部变量也叫实例属性
- 类里面的几种方法:(全部写在类里面)
1.实例方法:()里面默认习惯写self(即要求传入一个类的对象)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-230prT4h-1624014059293)(./笔记截图/QQ截图20210323091409.png " ")]
2.静态方法:()里面什么都不写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7Ta532o-1624014059294)(./笔记截图/QQ截图20210323091442.png " ")]
3.类方法:()里面写cls(即class)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrgDLqQI-1624014059297)(./笔记截图/QQ截图20210323091500.png " ")]
4.初始化方法(构造函数?):默认习惯将局部变量与属性名字取相同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L24t9Iem-1624014059298)(./笔记截图/QQ截图20210323091746.png " ")]
注:这里是实例属性不是实体属性
对象
- 对象的创建又称为类的实例化
语法:实例名=类名()
例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yztk53dS-1624014059299)(./笔记截图/QQ截图20210323093605.png " ")]
意义:有了实例,就可以调用类中的内容[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BP3MVAe-1624014059301)(./笔记截图/QQ截图20210323093653.png " ")]
- 对象使用类中的实例方法:
1.
对象名.方法名()
2.类名.方法名(类的对象)
–>实际上就是方法定义处的self
- 类属性、类方法、静态方法的使用方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1AnjJpg-1624014059302)(./笔记截图/QQ截图20210324164354.png " ")]
此处牛逼(耍流氓,Java与C++都没有):
- python是动态语言,在创建对象后,可以动态地绑定属性和对象()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jaFGBtOu-1624014059303)(./笔记截图/QQ截图20210324171838.png " ")]
两大编程思想(与语言没有关系):
1.面向对象
2.面向过程
面向对象的三大特征:
1.封装:提高程序的安全性
- 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。
- 在python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个"_"(君子协定,只是更改了变量名,
stu.__age->stu._Student__age
)2.继承:
- 语法格式
class 子类类名(父类1,父类2...):
- 如果一个类没有继承任何类,则默认继承object
- python支持继承多个父类(多继承)
- 定义子类时,必须在其构造函数中调用父类的构造函数
- 方法重写:
- 如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写
- 子类重写后的方法中可以通过
super().xxx()
调用父类中被重写的方法3.多态:
- 在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。
- 静态语言与动态语言的区别
静态语言(Java)实现多态的三个必要条件:
- 继承
- 方法重写
- 父类引用指向子类对象
动态语言的多态崇尚“鸭子类型”,比如python,只要有就行,只关心对象的行为。
object类
- object类是所有类的父类,因此所有类都有object类的属性和方法
- 内置函数
dir()
可以查看指定对象所有属性 - Object有一个
__str__()
方法,用于返回一个对于“对象的描述”,对应于内置函数str()
经常用于print()方法,帮我们查看对象的信息,所以我们经常会对__str__()
进行重写。 print(stu)#默认会调用__str__()这样的方法
特殊属性和特殊方法
- 特殊属性
__dict__实例对象的属性字典,类对象的属性方法的字典
__class__输出对象所属的类
__bases__查看所有的父类
__base__查看第一个父类
__mro__查看类的层次结构
__subclasses__查看所有子类
- 特殊方法
__len__()通过重写__len__()方法,让内置函数len()的参数可以是自定义类型
__add__()通过重写__add__()方法,可使用自定义对象具有“+”功能
__new__用于创建对象
__init__()对创建的对象初始化
类的浅拷贝与深拷贝
- 变量的赋值操作
只是形成两个变量,实际上还是指向同一个对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfYPbg2p-1624014059305)(./笔记截图/QQ截图20210328093846.png " ")]
- 浅拷贝(使用copy模块中的函数
computer2=copy.copy(computer)
)
python拷贝默认是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7OGXtjLL-1624014059306)(./笔记截图/QQ截图20210328095734.png " ")]
- 深拷贝(使用copy模块中的函数
computer3=copy.deepcopy(computer)
)
使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTxeOyeu-1624014059308)(./笔记截图/QQ截图20210328100931.png " ")]
模块(C的头文件?)
什么叫模块
- 模块的英文为Module
- 函数与模块的关系:
- 一个模块中可以包含N多个函数
- 在python中一个扩展名为.py的文件就是一个模块
- 使用模块的好处
- 方便其他程序和脚本的导入使用
- 避免函数名和变量名冲突
- 提高代码的可维护性
- 提高代码的可重用性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNAzEB7o-1624014059310)(./笔记截图/QQ截图20210328103736.png " ")]
自定义模块
- 创建模块
- 新建一个.py文件,名称尽量不要与python自带的标准模块名称相同
- 导入模块
import 模块名称 [as 别名]
from 模块名称 import 函数/变量/类
以主程序形式运行
- 在每个模块的定义中都包括一个记录模块名称的变量
__name__
,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__
变量值为__main__
。
python中的包
- 包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下
- 作用
- 代码规范
- 避免模块名称冲突
- 包与目录的区别
- 包含
__init__.py
文件的目录称为包 - 目录里通常不包含
__init__.py
文件
- 包含
- 包的导入
import 包名.模块名
- 导入带有包的模块时的注意事项:
- 使用import方式导入时,只能跟包名或模块名
- 使用from…import可以导入包、模块、函数、变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ddX9gMB-1624014059313)(./笔记截图/QQ截图20210328113103.png " ")]
python中常用的内置模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N5xLmNQ2-1624014059314)(./笔记截图/QQ截图20210329211643.png " ")]
第三方模块的安装及使用
- 第三模块的安装
pip install 模块名(在线安装模式)
- 第三方模块的使用
import 模块名
编码格式
- python的解释器使用的是Unicode(内存)
- .py文件在磁盘上默认使用UTF-8存储(外存)
- .py文件转换编码格式:
#encoding=utf-8
#coding:gbk
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-REkGYGCV-1624014059316)(./笔记截图/QQ截图20210330083649.png " ")]
文件的读写原理
- 文件的读写俗称“IO操作”
- 文件读写操作流程
- 操作原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DUle8p2i-1624014059317)(./笔记截图/QQ截图20210330090439.png " ")]
注: 最后需要关闭系统资源file.close
文件的读写操作
- 内置函数open()创建文件对象
- 语法规则:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gb49siCU-1624014059318)(./笔记截图/QQ截图20210330090010.png " ")]
常用的文件打开模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4t9yw2b-1624014059319)(./笔记截图/QQ截图20210330094130.png " ")]
文件对象的常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yu1412px-1624014059320)(./笔记截图/QQ截图20210330125643.png " ")]
with语句(上下文管理器)
-
什么是上下文管理器:如果类对象遵守上下文管理协议,那么类的对象就是上下文管理器。
-
上下文管理协议:实现了__enter__()方法和__exit__()方法
-
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭(不需要自己写.close),以此来达到释放资源的目的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eTfltOWY-1624014059321)(./笔记截图/QQ截图20210330212450.png " ")]
目录操作
- os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJi4FnTE-1624014059323)(./笔记截图/QQ截图20210330213751.png " ")]
- os模块用于对目录或文件进行操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwjKRohj-1624014059324)(./笔记截图/QQ截图20210330214548.png " ")]
- os.path模块用于对目录或文件进行操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x3aS0P4R-1624014059325)(./笔记截图/QQ截图20210330215710.png " ")]
补充重要方法:walk
可以递归遍历所有的文件,不仅可以获取当前目录下的所有文件,还可以把当前目录下的子目录的所有文件也获取。