包和模块

模块


如何定义一个模块:
创建一个py文件 把你的功能写入到文件中
如何使用模块:
import 关键字 用于导入模块到当前文件夹


当执行import 做了什么?
1.创建了一个命名空间
2.执行被导入的py中的代码 将里面的名字和地址对应关系
存储到命名空间
3.在执行文件中 创建一个名字 该名字指向地址 第一步
创建的命名空间(模块的命名)
执行的文件和被导入模块的命名 是相互独立的
在被导入模块中 所有的名字使用的都是自己的 和调用者无关

import 的其他写法
1.import xxx as xxx
给模块取别名 用于简化数据
#=取别名
import pppp as my
my.func()
print(my.myage)
2.import xxx,xxxx
一次导入多个模块
3. form xxx import xxx
从模块中导入某个名字到当前名称空间
注意 要避免名称冲突
如果冲突了 按照就近查找的原则
4.form xxx import xxx,xx,x
从模块中导入多个名称
5.form xxx import *
从模块中导入所有名称
__all__用于控制 使用者可以使用那些名称
from 和import 除了导入名称不同 其他特性一致
6.from取别名:
from pppp as my

python文件的两种执行方式
1.作为执行文件 (右键run)
2.作为模块被导入
__name__这个名称可以获取当前执行状态
如果是__main__说明当前文件是执行的
否则说明是作为模块
if __name__ == '__main__':
print('作为执行文件 ')
print(get_datetime())
else:
print('作为模块导入了')

重复导入模块时 模块中的代码不会重复执行 仅在第一次导入时执行



当你是使用from xx import 导入时 是将被导入的名字和地址的内存关系/。-。。。。


首先找内存中已经加载的模块(不会重复加载)-> 内置模块->sys.path
验证

查看sys.path(环境变量)
print



    1.什么是包
包是一种模块
对于使用者而言,使用方式和模块没有任何取别
但本质上就是一个文件夹,与普通文件的区别就是
多了一个__init__.py叫做包的初始化文件
  2 为何要用包
  包是文件夹,那文件夹就是用来组织文件的
  3.
#coding:utf-8
# 注意:
# 在python2中,包下必须有一个__init__.py文件,而python3中即便是没有也不会报错

# 首次导入包,发送三件事,
# 1. 以包下的__init_.py文件为基准来产生一个名称空间
# 2. 执行包下的__init_.py文件的代码,将执行过程中产生的名字都丢到名称空间中
# 3. 在当前执行文件中拿到一个名字p1,该p1就是指向__init__.py名称空间的

# 总结包的使用无非注意三点:
# 1. 但凡是在导入语句中带点的,点的左边都必须是一个包
# 2. 导入包就是在导包下的__init__.py文件
# 3. 如果使用绝对导入,绝对导入的起始位置都是以包的顶级目录为起始点
# 4. 但是包内部模块的导入通常应该使用相对导入,用.代表当前所在的文件(而非执行文件),..代表上一级
# 强调:
# 1. 相对导入只能包内部的模块之间互相导入使用
# 2. ..上一级不能超出顶级包
import sys
sys.path.append(r'D:脱产三期视频day181 包的使用dir1dir2')

# import p1 #导入模块其实就是在导入包下的__init__.py文件

# print(p1.xxx)
# print(p1.yyy)

# p1.f1()
# p1.f2()
# print(p1.p2)
# p1.p2.f3()

# p1.f3()





init的作用
用于初始化包中的模块
init中主要做什么?
导入包中的模块
包的嵌套
包里面还有包

相对导入
相对于某个模块而言 通常是相对于当前被执行的文件
(from..m1 import *)
.表示当前文件 ..表示上一级 ...再上一级
注意:相对导入仅用于包内模块的相互导入,不能超过顶层包
和绝对导入
从执行文件所在的位置开始的路径(import yyy.m1)
执行文件调用(import yyy)
from 导入时.点的左边必须时一个包名
import 后面必须有一个明确的名字,不能有.点

模块搜索顺序:
内存已经加载的——》内置的——》sys.path
sys.modules可用查看内存已经加载的
我们会经常用sys.path查看模块地址
两种执行方式:
1.作为执行文件
2.作为模块被导入使用
在代码中可使用__name__来区分

什么是包?
是包含一堆模块的文件夹
本质上就是一个文件夹
不同的是 包中应该包含__init__.py文件

为什么使用包?
从文件夹级别来组织代码

如何使用:
与使用模块一样
注意:在导入一个包时 实际导航导入的是__inti__.py文件


#导入函数文件夹下模块
import sys,os
print(__file__)
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
#导入函数,









原文地址:https://www.cnblogs.com/yanhui1995/p/9772586.html