2019/12/03 03-模块加载搜索和主模块用途

在这里插入图片描述
天然的.py文件可以直接拿过来使用,模块文件太多,所以有了目录,这就是包
**导入的语句有两种,impot后面必须是模块 ,好处是import可以把模块导入到当前名词空间,os.path只会将顶层os导入进来使用,想用path,这样是导不进来path的
只能导入完使用os.path,或者使用as语句重新命名 **

在这里插入图片描述
然后提供了另一种语句,from语句的好处就是需要什么就导入什么,from某个模块,import下的模块,函数,类,变量,都可以通过from,在后面的import后面导入,把这些变量,模块等加入到名词空间供你使用,但是要求from后面必须写模块,但并不把这些模块加入到名词空间中来
import后面的是一定会导入名词空间中的

在这里插入图片描述
这几种写法可能都用的上
在这里插入图片描述在这里插入图片描述在这里插入图片描述
必须有机制保证这些类,方法只生成一次,不然内存中就没空间了
在这里插入图片描述在这里插入图片描述
这个函数定义在t2在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
如果在里面真的创建类
在这里插入图片描述在这里插入图片描述
自己定义的.py文件就是模块,用的时候直接当模块导入即可在这里插入图片描述
1.模块名就是文件名
2.模块名必须符合标识符的要求,是非数字开头的字母数字和下划线的组合。test-module.py这样的文件名不能作为模块名
3.不要使用系统模块名来避免冲突,除非你明确知道这个模块名的用途
4.通常模块名为全小写,下划线来分割
(windows不区分大小写,linux区分大小写,所以建议都小写),所有的文件名要求都小写
类要求大驼峰,遇到单词就大写
模块名就是.py文件,必须全小写,单词用_下划线分隔

在这里插入图片描述
新建一个pathlib.py文件会如何
在这里插入图片描述
现在试试哪个比较优先
在这里插入图片描述在这里插入图片描述
如果把这个文件删除了在这里插入图片描述
这时候就跑到系统标准库里了在这里插入图片描述在这里插入图片描述
先找列表。先从当前项目找
在这里插入图片描述
zip访问的了,可以理解是系统库在这里插入图片描述
这是第三方库的位置
在这里插入图片描述
root是python解释器的安装目录在这里插入图片描述
这个是第三方库在这里插入图片描述
优先找自己的项目,然后到系统库里,然后再到第三方库里,自己写的库想怎么覆盖怎么覆盖,优先找自己项目,但是如果你要作为第三方库发布出去让别人使用,就要看是否跟其他人是否冲突
在这里插入图片描述
sys.path是个列表,列表就是有顺序的在这里插入图片描述在这里插入图片描述
当前环境运行t.py,会自动把当前运行环境的目录加载到sys.path的目录里去在这里插入图片描述在这里插入图片描述在这里插入图片描述
路径可以写什么,可以写zip文件(开源的压缩格式),egg文件(python文化里的文件,比zip文件多了一些元数据信息,2000年诞生)
在这里插入图片描述在这里插入图片描述
如果你运行主程序脚本,会把程序脚本所在的目录添加到PYTHONPATH目录里
在这里插入图片描述
当前运行,程序这样添加进来在这里插入图片描述在这里插入图片描述
同一个模块只加载一次,形成模块对象和标识符对应起来
在这里插入图片描述
模块只加载一次,模块内的类也只被加载一次
在这里插入图片描述在这里插入图片描述
这样就少了个t2在这里插入图片描述
首先要看下这个模块里有没有,sys.modules.keys在这里插入图片描述
把已经加载的模块形成一个kv对,加载的模块对象和名称之间建立关系,不管是第三方还是系统库,都会把已经导入的库,导入之前必须加载,就会把名称和模块对象建立kv对然后放在sys.modules里供大家使用,如果没有就要去sys.path搜索路径,去搜索这个模块到底在哪里在这里插入图片描述在这里插入图片描述
不会重复导入,所有的模块都会记录在sys.modules字典里面,记录已经加载的模块
最常用的已经加载进去了,还有builtin,所以内建函数非常有用
在这里插入图片描述
每个模块都有名字,用__ name__这个特殊变量存储当前模块名称
在这里插入图片描述
python程序运行的时候要有一个解释器进程,解释器初始化的时候会构造一个sys.modules字典,加载内建函数,还会加载main模块(主程序要运行的),加载sys模块 ,初始化搜索路径sys.path
运行的环境,解释器就搭建好了

在这里插入图片描述
命令行敲,或者python xx.py的时候或ipython交互式读取的时候,会将模块的__name__设置为__main__,,模块的顶层代码就在__main__这个作用域中执行
在这里插入图片描述
这些都是顶层代码,顶头写的,属于这个模块中最顶层代码
在这里插入图片描述
t2运行,在main中
在这里插入图片描述在这里插入图片描述
每一个模块都有特殊的属性,就是name在这里插入图片描述
这里就叫t2在这里插入图片描述
但是这个属性可以进行修改 在这里插入图片描述在这里插入图片描述
说明可以改变,但是不建议动,因为就区分不出来了
这里相当于在t2。py当做主模块运行在这里插入图片描述
t2作为被导入的模块,名字方发生变化,就执行else里面的了在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
import t2做了上面 的事情在这里插入图片描述
直接运行t2是这样的在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
以后 的加载到sys.module里面去找
如下就打印2次
在这里插入图片描述
这样就保证实例只有一个在这里插入图片描述
纯定义是纯功能,是供别人使用的 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
可以把一开始的主模块代码写到里面去,如果退休了,就把名称改一下,因为作为被导入模块,名字不可能是main在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值