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


小知识点:

  • 保留字(即关键字)
  1. 三引号定义的字符串可以分布在连续的多行(注意:与回车、\符号效果不同)
  2. 三引号也可用作多行注释
  • 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)
==比较的是值
isis 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的头文件?)

什么叫模块

  1. 模块的英文为Module
  2. 函数与模块的关系:
    • 一个模块中可以包含N多个函数
  3. 在python中一个扩展名为.py的文件就是一个模块
  4. 使用模块的好处
    • 方便其他程序和脚本的导入使用
    • 避免函数名和变量名冲突
    • 提高代码的可维护性
    • 提高代码的可重用性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNAzEB7o-1624014059310)(./笔记截图/QQ截图20210328103736.png " ")]

自定义模块

  1. 创建模块
    • 新建一个.py文件,名称尽量不要与python自带的标准模块名称相同
  2. 导入模块

import 模块名称 [as 别名]
from 模块名称 import 函数/变量/类

以主程序形式运行

  • 在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量值为__main__

python中的包

  1. 包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下
  2. 作用
    • 代码规范
    • 避免模块名称冲突
  3. 包与目录的区别
    • 包含__init__.py文件的目录称为包
    • 目录里通常不包含__init__.py文件
  4. 包的导入
    • import 包名.模块名
    • 导入带有包的模块时的注意事项:
    1. 使用import方式导入时,只能跟包名或模块名
    2. 使用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可以递归遍历所有的文件,不仅可以获取当前目录下的所有文件,还可以把当前目录下的子目录的所有文件也获取。