Python模块 --- 最高级别程序组织单元
模块 --- 最高级别程序组织单元
《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导入无法工作;
Python模块 --- 最高级别程序组织单元的更多相关文章
- [TimLinux] Python 模块
1. 概念 模块是最高级别的程序组织单元,它将程序文件和数据封装起来以便重用.实际上,模块往往对应Python文件,每一个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量,模块和 ...
- 扩展Python模块系列(二)----一个简单的例子
本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...
- 打包发布Python模块或程序,安装包
Python模块.扩展和应用程序可以按以下几种形式进行打包和发布: python setup.py获取帮助的方式 python setup.py --help python setup.py --he ...
- python笔记6 模块与包 程序开发规范 包 re sys time os模块
模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...
- python模块部分----模块、包、常用模块
0.来源:https://www.cnblogs.com/jin-xin/articles/9987155.html 1.导入模块 1.1模块就是一个python文件,模块名是文件名 1.2导入模块的 ...
- python模块导入细节
python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: ...
- python 模块和包
一,模块 1,什么是模块? 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀. 但其实 import 加载的模块分为四个通用类别: 1,使用pyt ...
- python 模块和包以及他们的导入关系
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
- 22 Python 模块与包
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
随机推荐
- XC7K325TFFG900 Device 内部结构图
- mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?
mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟dao 建立关系:然后 xml 中的每段 sql 会有一个id 跟 dao 中的接口进行关联. 那么 ...
- vertica ROS和WOS错误
频繁写入vertica,可能导致ROS和WOS错误.如下: java.sql.SQLTransientException: [Vertica][VJDBC](5065) ERROR: Too many ...
- Laravel关联模型中has和with区别
本篇文章给大家带来的内容是关于Laravel关联模型中has和with区别(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先看代码: 1 2 3 4 5 6 $user ...
- Ubuntu16 安装 wireshark
添加源 sudo apt-add-repository ppa:wireshark-dev/stable 更新 sudo apt-get update 安装 sudo apt-get install ...
- ACM 常用 OJ 网址
ACM 常用 OJ 网址 浙江大学: https://pintia.cn/ 北京大学: http://poj.org/ 杭州电子科技大学: http://acm.hdu.edu.cn/ 中国科技大学: ...
- 我自己整理的 Linux 常用命令
1.查看文件安装路径: 由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址). 这里以 xsp 为例.比如说我安装了xsp,但是不知道文件都安装在哪些地方.放在哪些文件夹里,可以用下 ...
- 另一种缓存,Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
- python 学习之 基础篇二 字符编码
声明: 博文参考1:字符编码发展历程(ASCII,Unicode,UTF-8) 博文参考2:Python常见字符编码间的转换 (1)为什么要用字符编码 早期的计算机使用的是通电与否的特性的真空管,如果 ...
- Flutter 徐徐图之(一)—— 从搭建开发环境到 Hello World
一.环境变量 由于众所周知的原因,在国内访问 Flutter 有时可能会受到限制,所以在开发之前,需要先配置环境变量 MacOS: 编辑 ~/.bash_profile 文件 vim ~/.bash_ ...