一. 模块
1. 什么是模块?
别人写好的一组功能 文件夹/py文件/c语言编译好的一些编译文件
有的功能开发者自己无法完成,这样的话需要借助已经实现的函数\类来完成这些功能
你实现不了的功能都由别人替你实现了
模块和操作系统打交道和时间和网络通信
模块可以节省内存和提供更多的功能
2. 为什么要有模块?
分类和管理方法
节省内存
提供更多的功能
3. 模块的分类
内置模块
安装python解释器的时候跟着装上的那些方法
第三方模块/扩展模块
没在安装python解释器的时候按装的那些方法
自定义模块
你写的功能如果是一个通用的功能,,那你就把它当做一个模块
4. import ...
在import的时候命名空间的变换
重命名 as
一行导入多个模块
5. from ... import...
在import的时候命名空间的变换
重命名
一行导入多个...
from 模块 import *
* 和 __all__ 的相关性 __all__可以控制*导入的内容
6. 模块相关的其他知识
1. 把模块当成脚本运行 : 从本模块中反射本模块中的变量
if __name__ == 'main':
所有不需要调用就能执行的内容
import sys
sys.modules['__main__'] # 获取当前文件的内存地址
运行一个py文件的两种方式
1. 以模块的形式运行
import module
module.变量()
2. 直接pycharm运行, cmd运行
--- 以脚本的形式运行
那么需要在本文件中直接打印的代码上加上
if __name__ == '__main__':
在编写py文件的时候,所有不在函数和类中封装的内容都应该写在这里
反射:
getattr(sys.modules[__name__],'要反射的变量名')
2. 模块搜索路径 sys.path
3. pyc编译文件
4. 重新加载模块 已经导入的模块,即便被修改在程序执行过程中,也不会生效
5. 模块的循环引用 - 不允许
7. import 文件名
文件名 : 要求和变量名的规范一样
模块不会被多次导入
模块的导入相当于执行这个文件
模块有自己独立的命名空间
重命名 as
8. 导入多个模块
一行导入多个, 逗号隔开, 不建议使用
多行导入多个 : 内置 第三方 自定义的顺序
1. 介绍:
1 介绍: 2 所有的模块导入都应该尽量放在这个文件的开头 3 import module 4 要导入一个py文件的名字,但是不加.py后缀名 5 import这个模块相当于执行了这个模块所在的py文件 6 7 from ...(模块名) import 变量
8 模块的名字必须要满足变量的命名规范,一般情况下,模块都是小写字母开头的名字
2. import ... 的用法
1 首先需要调用这个模块也就是,import ...(模块名),相当于执行这个模块 2 要创建一个模块mudule.py
mudule.py
def login(): print("执行了login") name = '名字'
1 import module # 调用模块,首先要导入模块 2 module.login() # 执行模块里面的login函数 3 print(module.name) 4 5 # 模块的重命名 6 import module as m 7 print(m.name) 8 m.login() # 指向模块命名空间中的login函数 9 module.login() # 会报错,因为重新命名了 10 11 # 导入多个模块 12 # import os,module .....
3. from .... import ....的用法
mudule.py # 模块名
def login(): print("执行了login") name = '名字'
from module import login # 这么调用函数的用法和上面有点不同,直接login()就可以了 # 仍然相当于执行了整个py文件,只是可以更方便执行里面的变量了 # 流程: # 1. 找 module模块 # 2. 开辟一块属于这个模块的命名空间 # 3. 执行这个模块 # 在from ...import..的时候命名空间的变换 # login() # 这么调用就可以了 # 导入了什么 就能使用什么 不导入的变量,不能使用 # 不导入并不意味着不存,而是没有建立文件到模块中其他名字的引用 login() def login(): print('执行了函数login....') # 当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字只代表最后一次对它赋值的那个方法或者变量 login() # 先打印模块里能打印得东西(就是不调用),然后执行自己的,不执行模块里的
导入的多中方法:
1 from module import login # 重新导入 2 login() # 直接调用模块里面的变量,这样调用看起来更方便 3 from module import name 4 print(name) 5 6 # 重命名 7 from module import login as a # 改变引用 8 a() 9 10 # 导入多个 11 from module import login ,name 12 login() 13 print(name) 14 15 # from 模块 import * # 这样更方便 16 from module import * # 用 “*” 可以直接调用里面的变量 17 login() 18 print(name)
4. 把模块当成脚本运行
module2.py # 模块名
import sys print(__name__) # '__main__' my_module = sys.modules['__main__'] # 获取当前文件的内存地址 print(my_module) print(sys.modules[__name__]) # __name__ ==> '__main__' def func(): print("good") getattr(sys.modules[__name__],'func')()
1 import sys 2 import module2 # 执行自己创建的py文件,也可称为模块 3 print(module2.__name__) # 调用模块里面的内容 4 5 # {'sys':文件的内存地址 6 # 'module2': module2的地址 7 # '__main__' :当前直接执行文件所在的地址} 8 # 储存了所有导入的文件的名字和这个文件的内存地址 9 10 # 在使用反射自己模块中的内容的时候 11 import sys 12 # getattr(sys.modules[__name__],'变量名')