模块===包
Posted lynysy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块===包相关的知识,希望对你有一定的参考价值。
模块
模块的分类 :
内置模块 : 安装python解释器时跟着装的
第三方模块/扩展模块 :没在安装python解释器的时候装的功能
自定义模块 : 自己写的模块文件
什么是 模块 :
有的功能开发者自己无法完成,这样的话需要借助 已经实现的函数或类 来完成这些功能;
你实现不了的功能都由 别人替你实现了;
别人写好的一组功能 : 包括 文件夹 / py文件 / c语言 编译好的编译文件
这样可以 分类管理方法 节省内存 提供更多的功能
模块名:
模块文件名 和变量的名的命名规则 一样 一般情况下 小写字母开头
如何使用模块 ?
import 模块名 # 导入模块
模块名 . 方法名() # 调用模块中的方法名
模块名 . 变量名 # 得到 模块中的变量 的值
import 模块名 这一步做了什么:?
1. 首先 找到这个模块
2. 创建一个属于 这个模块的 一个内存空间
将里边的 变量或方法存到空间中 若 模块中有两个 同名的变量 则会将第一个变量覆盖
3. 执行 这个模块中的内容
4. 将这个模块 所在的命名空间 建立一个 和 模块名 之间的 引用关系
在模块中 调用方法是 首先找的 也是 模块中的变量
模块的重命名: 改的 是 主要文件中 引用模块时 引用的名字
导入多个模块: 用 , 隔开
import 模块1 , 模块2
但是在 PEP8规范中 , 不允许 一行导入 多个模块
所有的模块 都应 尽量放在这个文件夹开头 以便 使用文件 及使用功能 的人 清楚 用了什么模块
模块的导入顺序:
内置模块 = = == 第三方模块 = = ==== 自定义模块
自己可以创建一个my_module.py文件, 里边添加 代码 将其当成模块导入执行
主要文件 my_moudle模块文件
import my_module #执行===>额 print(‘额‘)
my_module.login()#调用模块中的login()===>登录,alex def login():
print(‘登录‘,name)
name=‘‘ alex ‘‘
模块重命名:
import module as n
那么 调用模块中函数或者方法
n . login() 或 print(‘ n.name ‘)
from 模块名 import 方法名或变量名
有时候 会有红色的线 不是 python解释器 发现的错误 而是 pycharm根据它的一些判断 得出的结论
from my_module import login
from ... import ... 的时候发生了什么?
仍然相当于 执行了整个 .py 文件
在 from import 的时候 命名空间的变换 :
1. 直接 login() 就可以调用方法
2. 导入了什么 , 就能使用什么 ,
不导入的变量 , 不能用 , 但是不导入 并不意味着 不存
而是 没有 建立文件 到 模块中其他的名字引用
3. 当 模块中导入的 方法 或者 变量 和本文件重名时
那么 这个名字代表 最后一次 对他赋值的那个方法或变量
4. 在本文件中对 全局变量的修改是 完全不会 影响到 模块中的变量引用的
重命名:
from my_module import login as m
那么 以后引用就会变成 m() 模块中的名字是不变的 变得是引用的时候用到名字
导入多个:
from my_module import login , name
login()===> 模块中的login
print(name) ===> 指向模块中的 name
name =‘ 太亮 ‘ ====> 指向 新的 name
login() ===> 指向 模块中的 login
导入多个模块之后重命名
from my_module import login as l , name as n
变得也是引用中的 名字 , 不是模块中的名字
from 模块名 import *
from my_module import *
login()
name 两个都可以 引用
__all__可以控制导入的内容 _ _all__中必须是 [ ‘ 变量名‘ ]
若模块中 有个 __all__[ ‘ login ‘ ]
这样的话name 就不能用了
若想用就重新导入一次
from my_module import name
login的指向 :
若在自己空间添加一个 login函数 则会开一个 空间
里边装的是login会指向自己定义函数的空间,
原来的指针会断 当再次导入 一次模块的时候 那个指针就会断开 指向模块的 login空间
from my_module import login my_module
def login(): def login():
print( ‘ in my logion ‘ ) print( ‘ 我 ‘ )
login() ====> in my login # 执行的是 自己文件中的 函数
def login():
print( ‘ in my login ‘ )
from my_module import login
login() ====> 我 # 执行的是模块中的 函数
1. from my_module import login 执行这句话时 干了什么?
1. 先找到 my_module 模块
2. 开辟一块属于这个模块的命名空间
3. 执行这个模块
2. 知道了 要import 的是login这个名字 那么就会
在本文件中创建一个变量 login
这个login 指向 模块命名空间中的 login函数
若一个模块中有两个 name 开辟空间的时候 执行到name 的时候先指向的是第一个名字 ,
当再执行到name= -***的时候 那个指针会断开原来的 指向另外一个名字
模块的其他相关知识
1. 把模块当成脚本运行: import my_module
以上是关于模块===包的主要内容,如果未能解决你的问题,请参考以下文章
包logging模块hashlib模块openpyxl模块深浅拷贝
包,logging模块,hashlib模块,openpyxl模块,深拷贝,浅拷贝