day18 包
今日内容
昨日内容回顾
-
正则
-
元字符
元字符 匹配规则 \w 一个字母、数字或下划线 \w+ 一个或多个字母、数字或下划线 \d 一个数字 \d+ 一个或多个数字 \S 一个非空白字符(数字、字母、下划线或特殊符号) ^ 从开头匹配 $ 从结尾匹配 . 匹配任意除换行符之外的字符 * 匹配0个或多个左侧的字符,贪婪匹配 + 匹配1个或多个左侧的字符,贪婪匹配 ? 匹配0个或1个左侧的字符,非贪婪匹配 e{2} 匹配2个e e{1,6} 匹配1到6个e,贪婪匹配 | 或 () 分组,括号外的不保留 (?:) 分组,保留括号外的 \. 能够将匹配任意字符的点转译成普通的点 [0-9a-zA-z] 范围内的数字字母,主要参照ascii码表 [^0-9] 不要数字0-9 \w+? 将贪婪匹配变成非贪婪匹配 -
常用方法
-
-
logging
今日内容详细
包
包的定义:具有__init__.py
文件的文件夹就是一个包。
包的目的是用来管理模块。
包的本质就是一个模块。模块可以导入,包也可以导入。
在Python 2中,使用import导入一个包,如果包中没有__init__.py
文件,会报错;
在Python 3中,使用import导入一个包,如果包中没有__init__.py
文件,不会报错,但也无法正常使用。
在导入时只要使用点操作,就是在导入包。导入时,.
前面的必须是一个包。
我们在项目的根目录PyProject
下建立一个名为bake
的包,然后按照下面的目录树创建包和py
文件:
----bake |----api | |----policy.py | |----versions.py | |----__init__.py |----cmd | |----manage.py | |----__init__.py |----db | |----models.py | |----__init__.py |----file_tree.py |----test.py |----__init__.py
创建完成后是这个样子的。需要注意的是,bake
文件夹一定要直接放在项目的根目录PyProject
下,否则接下来的导入过程可能会出问题。
也就是这个样子:
导入包可以使用相对路径和绝对路径两种方法:
绝对路径:bake1.api.policy
从最外层的开始查找
相对路径:取决于在哪个文件中启动,.
代表当前目录
导入包的方式最基本的结构为:
@H_765_301@import 包.包.模块比如,我们想在test.py
文件中导入version模块,并使用其中的name
变量:
我们成功导入了包,也成功调用了包中的变量。但是每次使用的时候都要使用长长的绝对路径,十分麻烦。这时,我们可以给导入的包取一个别名,来方便调用:
@H_765_301@import bake.api.policy as p print(p.name) 输出的结果为: api_policy alex我们也可以通过from方法来导入包中指定的函数或变量,而不是将包整体导入。其基本结构为:
@H_765_301@from 包.包.模块 import 函数,变量,*比如,我们要导入模块manage
中的变量name
,就可以这样:
我们说过,包的本质也是模块,但是如果我们直接导入包,却发现无法直接调用其中的模块中的变量:
@H_765_301@from bake import api print(api.policy.name) 程序报错,报错信息为: Traceback (most recent call last): File "C:/Users/Sure/PyProject/bake/test.py",line 21,in <module> print(api.policy.name) AttributeError: module 'bake.api' has no attribute 'policy'这是因为我们没有指明api包所需要导入的文件。这时,我们就要在api包下的__init__.py
文件中指明导入的文件:
这样,程序就可以顺利运行啦。
如果我们直接在test文件中导入bake中的所有模块中的函数和变量,就可以这样:
@H_765_301@from bake import * print(name) 输出的结果为: api_policy api_versions cmd_manage taibai因为变量名都命名为name
,相互覆盖之后,只剩下了taibai。
总结一下,当程序运行到from bake import *
命令时,一共经历两个步骤:
- 现在bake的
__init__.py
中导入bake下的所有的包 - 在bake下的所有包中的
__init__.py
中导入每个包下的模块
模块与包的关系为:
模块 - 软件开发规范 - 包
按照软件开发规范创建包,包中存放模块。