一、模块
中文版的python各种资料文档官网:https://yiyibooks.cn/ ,很重要
参考文章:https://www.cnblogs.com/sui776265233/category/1239819.html
1.1 模块和文件
1) 什么是模块
模块是支持从逻辑上组织python代码的方法,代码片段互相之间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数 。
2) 模块文件
模块的文件名就是模块的名字加上扩展名.py
3) 名称空间
名称空间就是一个从名称到对象的关系映射集合。给定一个模块名之后,只可能有一个模块被导入python解释器中,所以在不同模块之间不会出现名称交叉现象。每个模块都定义了它自己的唯一的名称空间。
1.2 导入模块
1) 搜索路径
模块的导入需要一个叫做“路径搜索”的过程,python在文件系统“预定义区域”中查找要调用的模块,搜索路径在sys.path中定义。
2) 模块导入方法
使用import导入,也可以只导入模块的某些属性,导入模块时,可以为模块取别名
3)导入和加载
当导入模块时,模块的顶层代码会被执行,一个模块不管导入几次,只会被加载load一次
4)从zip文件中导入
python加入了从ZIP归档文件导入模块的功能,如果搜索路径中存在一个包含python模块(.py .pyc 或 .pyo文件)的.zip文件,导入时会把ZIP文件当作目录处理
1.3 包
1)目录结构
包是一个由层次的文件目录结构,为平坦的名称空间加入有层次的组织结构;允许程序员把有联系 的模块组合到一起;包目录下必须有一个_init_.py文件。
2) 绝对导入
- 相对导入
1.4 内置模块
1)hashlib 模块
2)tarfile模块
二、 hashlib模块 — 安全散列和消息摘要
hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法,使用update()方法以类字节对象填充这个对象(通常为字节)。使用digest()或hexdigest()方法来向它请求摘要。 该模块在用户登录认证方面应用广泛,对文本加密也很常见。
注意:向对象中传入字符串时,必须为编码类型。可以使用字符串前b’ '的方法或使用.encode(‘UTF-8’)的方法,使字符串变为bytes类型。
hashlib.new(name[, data]) 是一个通用构造函数,它接受所需算法的字符串名称作为其第一个参数。
#hashlib.sha256(b"Nobody inspects the spammish repetition").hexdigest()
三、tarfile模块
tarfile 模块用于读取或者压缩tar文件,可针对gzip、bz2或lzma等格式文件进行相关操作。
**tarfile.open(name=None, mode=‘r’, fileobj=None, bufsize=10240, kwargs)
mode必须是’filemode[:compression]‘形式的字符串,默认为’r’。
3.1 mode 模式组合:
‘r’ 或 ‘r:*’ :通过透明压缩打开阅读(推荐)。
‘r:’ 无压缩打开专用读取。
‘r:gz’ 使用gzip压缩打开阅读。
‘r:bz2’ 使用bzip2压缩打开阅读。
‘r:xz’ 使用lzma压缩打开阅读。
‘x’或’x:’ 完全无压缩地创建tarfile。引发FileExistsError异常(如果它已存在)。
‘x:gz’ 使用gzip压缩创建tarfile。引发FileExistsError异常(如果它已存在)。
‘x:bz2’ 使用bzip2压缩创建tarfile。引发FileExistsError异常(如果它已存在)。
‘x:xz’ 使用lzma压缩创建tarfile。引发FileExistsError异常(如果它已存在)。
‘a’ 或 ‘a:’ 打开,无需压缩。如果文件不存在,则创建该文件。
‘w’ 或 ‘w:’ 打开未压缩的写入。
‘w:gz’ 打开gzip压缩写入。
‘w:bz2’ 打开bzip2压缩写。
‘w:xz’ 打开lzma压缩写。
如果指定fileobj,它将用作名称以二进制模式打开的file object的替代。它应该在位置0。
bufsize指定块大小并默认为20 * 512字节。
3.2 TarFile Objects
TarFile对象提供了一个tar归档文件的接口。
3.2.1 class tarfile.TarFile 读写tar存档的类。
tarfile.is_tarfile(name) 返回True如果名称是tar存档文件,tarfile模块可以读取。
3.2.1 classmethod TarFile.open(…) 替代构造函数。
TarFile.getmember(name) 返回成员名称的TarInfo对象。如果在归档中找不到名称,则会引发KeyError。
TarFile.getmembers() 将归档的成员作为TarInfo对象的列表返回。该列表与存档中的成员具有相同的顺序。
TarFile.getnames() 返回成员作为他们的名字的列表。它与由getmembers()返回的列表具有相同的顺序。
TarFile.list(verbose=True, *, members=None) 将目录打印到sys.stdout。如果verbose是False,则只打印成员的名称。 如果True,则产生类似于ls -l 的输出。
TarFile.next() 当打开TarFile进行读取时,将归档的下一个成员作为TarInfo对象返回。如果没有更多可用,返回None。
TarFile.extractall(path=".", members=None, *, numeric_owner=False) 将归档中的所有成员解压缩到当前工作目录或目录路径。
TarFile.extract(member, path="", set_attrs=True, *, numeric_owner=False) 使用其全名将成员从归档提取到当前工作目录。其文件信息尽可能精确地提取。成员可以是文件名或TarInfo对象。
TarFile.extractfile(member) 从存档中提取成员作为文件对象。成员可以是文件名或TarInfo对象。如果成员是常规文件或链接,则会返回io.BufferedReader对象。否则,返回None。
TarFile.add(name, arcname=None, recursive=True, exclude=None, *, filter=None) 将文件名称添加到归档中。名称可以是任何类型的文件(目录,fifo,符号链接等)。
TarFile.addfile(tarinfo, fileobj=None)¶将TarInfo对象tarinfo添加到归档中。
TarFile.close()
四、OOP编程技能
4.1 OOP基础
1)对象
对象与类为实现关系,类与类为继承关系
对象是数据和操作数据的方法的结合。
对象的状态(数据):一个对象用数据值来描述它的状态,也称为对象属性。
对象的行为(操作):对象的行为用于改变对象的状态,也称为对象方法。方法名以’__'开头
对象唯一性(句柄):即对象名称,每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。
对象之间的通信:对象之间进行通信的结构叫做消息
4.1.1 内置属性
由于一切皆对象,python中的内置函数和操作符号(例如:.、 [] 、()、with 等)都对应类(对象)中的内置方法.
——内置数据属性:
doc :类文档,子类不继承
module:类的模块名(含包名)
dict:类属性,含数据和方法属性,对象不显示类中的属性
bases:父类,多个用元祖组成
class:当前类名
——内置方法属性:
new 创建对象,静态方法,类() 触发
init 初始化对象,由__new__返回本类对象时触发
del: del 对象时触发
str :显示对象打印格式
repr:同上,区别:命令行下,执行repr(对象名)打印,一般用作程序调试
getattr :对象取属性(不包含方法属性调用)触发
setattr:对象属性被修改时(包含方法属性调用)触发
delattr:删除对象属性时触发
getattribute:“对象名.” 形式就会触发,不区分赋值还是取值,删除等操作。
getitem:同__getattr__,不过不是采用".“来操作而是”[ ]"
setitem
delitem
call:对象名() 时被触发
enter :进入with 代码块被执行
exit : 退出with 代码块前被执行
next : 定义可迭代对象
iter: 定义迭代器
4.1.2 描述符
描述符本质就是一个新式类(Python3都是新式类),在这个新式类中,至少实现了__get__(),set(),delete()中的一个。其作用是用来代理另外一个类的类属性.
分类:
描述符中仅定义__get__,称 非数据描述符
描述符中定义了__set__或者__del__之一 ,称 数据描述符
优先级(从高到低)
类属性
数据描述符
实例属性
非数据描述符
getattr(没有属时调用)
- 类
具有相同特性(数据元素)和行为(方法)的对象的抽象就是类对象的抽象是类,类的具体个性化就是对象。
类的属性:它是对象的状态的抽象,用数据结构来描述类的属性,也称为成员属性。
类的方法:它是对象的行为的抽象,用操作名和实现该操作的方法来描述,也称为成员方法。
类的结构:
一般/具体结构称为分类结构 ——用来描述在继承中子类与父类的关系,即一个派生子类的实例化对象是其父类的一个”例子”;
整体/部分结构称为组装结构——组合”是实现继承的方式之一,在”组合”继承中,一个子类可以有多个父类
创建子类只需要在圆括号中写明从哪个父类继承即可。
3)属性
公有属性:类内外都可以被访问
私有属性:只能被类内函数调用,以"_" 开头 。
内置属性:系统在定义类时默认添加,命名格式为 'X’
4.2.1 类的装饰器
被装饰对象:类、普通函数、类方法
装饰者:普通函数;描述符方法(用描述符自身代替 @描述符名)
4) Python 面向对象编程三个基本特征:
——封装
封装的作用:一个类就是一个封装了数据以及操作这些数据的方法的逻辑实体。通过封装,为对象内部的数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。即隐藏类的功能实现的细节,使代码模块化(松耦合、高内聚)。
——继承
类之间的关系:
- 通过继承创建的新类称为”子类”或”派生类”
- 被继承的类称为”基类”、”父类”或”超类”
实现继承的方式:
实现继承:子类的属性和方法完全继承于父类。
可视继承:子类继承父类的外观和方法。
接口继承:子类的属性名和方法名继承于父类,但是具体的属性值和方法实现由子类重写。
——多重继承
在Python中在定义类的时候,可以直接继承多个父类来实现多重继承。
注意:在实现多重继承时,如果继承的多个父类中均有名称相同的方法时,要注意继承的顺序。
——多态
在不同的对象中可以定义同名属性或方法,但是属性值或方法实现却是各不相同的。
5) 组合
组合就是让不同的的类混合并加入到其他类中来增加功能和代码重要性。
组合应用:两个类明显不同,可以让一个类称为另一个类的组件。
6)特殊方法:
类方法:
——使用classmethod装饰器定义;
——第一个参数cls表示类本身
7)静态方法
基本上就是一个函数,在语法上像是一个方法,没有访问对象和它的字段或方法,使用staticmethod装饰器定义。
—— init 方法
实例化类实例时默认会调用的方法;
—— str 方法
打印/显示实例时调用方法,返回字符串
—— _call_方法
用于创建可调用的实例