Python模块 --- 最高级别程序组织单元
2024-09-01 11:03:22
模块 --- 最高级别程序组织单元
《Python学习手册》笔记
import 导入1个模块
from 获取模块指定变量名
imp.reload 重新载入模块文件代码的方法
模块作用
- 代码复用;
- 系统命名空间的划分;
- 实现共享服务和数据(跨系统共享组件);
import工作:
- 搜索;
- 编译;
- 运行。
模块搜索路径
- 程序主目录;
- PYTHONPATH目录(环境变量);
- 标准链接库;
- 任何.pth文件内容;
上面4步构成sys.path(模块搜索路径),sys.path可以查看当前搜索路径列表。
导入模块文件
- 源代码文件name.py;
- 字节码文件name.pyc;
- 目录name,包导入;
- 编译的扩展模块(通常为C/C++),导入时使用动态链接;
- 用C编写好的内置模块,通过静态连接至Python;
- ZIP文件组件,导入时自动解压;
- 内存映像,对于frozen可执行文件;;
- Java类(JPython);
- .Net组件(IronPython)。
import 导入
- from * 表示导入模块所有变量;
- 导入只发生1次;
- import和from是赋值语句,import将模块对象赋值给变量名,from将一或多变量名赋值给另一模块中同名对象;
- 修改模块内的变量和模块内变量和现模块变量名冲突时必须使用import导入;
模块命名空间
模块属性可通过__dict__/dir()进行获取。
模块重载(只能用于Python编写模块)
原因:模块在首次导入时加载执行,之后导入不会重新执行文件。
- reload内置函数;
- reload处理模块对象;
- reload位于模块之中,需导入自己;
- reload会在模块当前命名空间执行新代码,并对其命名空间进行覆盖;
- 文件顶层赋值语句使变量名变为新值;
- 重载会影响所有使用import读取了模块的客户端;
- 重载只会对以后使用from的客户端造成影响。
模块包导入
import dir1.dir2.mod
from dir1.dir2.mod import x
- 模块包的路径包含在sys.path中;
- 模块包路径目录下必须包含__init__.py文件(包初始化钩子),容器目录不需要此文件;
- 包首次导入时会执行__init__.py文件,用于初始化(__all__可以指定from *导入子模块的名称清单);
- import dir1.dir2.mod as mod
相对导入(只适用于包内导入)
相对导入 --- 导入只搜索包的目录,包目录为唯一搜索路径。
绝对导入 --- 导入搜索路径的模块。
- 只适用于包内模块文件import导入;
- 只是用于from语句;
高级模块话题
- 模块隐藏数据(_X变量和未包含在模块顶层__all__变量在from *导入时不会导入,但是import仍可访问);
- 启用实验特性(from feture import featurename);
- 混合用法模式(name 和 main,自我测试代码);
- 修改模块搜索路径(修改sys.path列表,仅在当前Python会话或进程有效);
- import和from语句as扩展(将模块或模块变量赋值给不同变量名);
- 使用名称字符串进行导入(exec('import '+ modulename) 或使用内置__import__函数(import(modulename));
- 过渡性模块重载(重载模块相关子部分);
模块设计理念
- 总在Python模块内编码;
- 模块耦合降到最低;
- 最大化模块黏合度;
- 尽量少修改其它模块变量。
模块注意事项
- 顶层代码语句次序先后;
- from复制变量名;
- from * 让变量语义模糊;
- reload不会影响之前的from导入;
- 递归形式(相互导入的模块调用)的from导入无法工作;
最新文章
- CentOS下PHP7的编译安装,MySQL的支持和一些问题的解决
- C++读写文件ofstream,ifstream,fstream)[转]
- iOS 和 Android 测试托管平台 FIR.im 的注册与常用功能
- Linux基础2
- Postman Postman测试接口之POST提交本地文件数据
- web开发必备-网络基础知识---记录一下
- android获取手机的所有通讯录的号码和sim卡号码
- nginx 基础文档
- 常用的用户状态命令包括:whoami、id、groups、newgrp 等
- ORACLE 解析xml字符串-转载的
- php 异常捕获
- 第九十一节,html5+css3pc端固定布局,完成首页
- 设备类型检测大全---userAgent
- 在 ubuntu18.04 中搭建 Django 开发环境
- 回滚的意义---JDBC事务回滚探究
- 18.1利用socket .io 实现 editor间代码的同步
- vue中使用animate.css
- jmeter函数简介
- APP案例分析之华为浏览器
- vue2借助animate.css实现路由动画效果
热门文章
- 是的 你没看错!!!用JAVA为MCU开发物联网程序?
- git 版本库之间的依赖 --submodule
- centos7 安装docker(手动和脚本安装)换源 卸载
- CentOS中设置Apache服务器网站访问日志[每天的日志]
- Centos 7.6搭建Skywalking6.5+es6.2.4
- hibernate中many-to-one的not-found属性和@notfound注解
- Webpack 4 : ERROR in Entry module not found: Error: Can't resolve './src'
- Linux进程启动/指令执行方式研究
- 未能加载文件或程序集“Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
- python 数据结构之图的储存方式