Python模块(Module)详解
文章目录
- 一、模块概念
- 二、模块导入与使用
- 2.0 准备工作
- 2.1 import
- 2.1.1 导入
- 2.1.2 使用
- 2.2 from...import
- 2.2.1 导入
- 2.2.2 使用
- 2.3 from...import *
- 三、模块扩展
- 3.1 搜索路径
- 3.2 加载顺序
- 3.3 别名
- 3.4 模块规范
- 四、小结
一、模块概念
Python模块(Module),是一个Python文件,以
.py
结尾,包含Python对象定义和Python语句。
模块能定义函数、类和变量,也可以包含可执行的代码。
白话如下:
- 每一个以扩展名
py
结尾的 Python 源代码文件都是一个 模块 - 模块名 同样也是一个 标识符,需要符合标识符的命名规则
- 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的 工具
- 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先
导入
这个模块
二、模块导入与使用
2.0 准备工作
编写模块:wc_module01.py
,代码如下:
title = '旺财模块01'def say_hello():print('hello wc01')class Student:pass
编写模块:wc_module02.py
,代码如下:
title = '旺财模块02'def say_hello():print('hello wc02')class Teacher:pass
2.1 import
2.1.1 导入
可以通过import
关键字导入模块,如下:
import module1,module2...
如果导入多个模块,以逗号
相隔,不过不建议这么做,应采取每个模块独占一行
的方式,如下:
import module1
import module2
...
eg.
import wc_module01
import wc_module02
2.1.2 使用
模块导入之后,可以通过模块名.
方式使用提供的工具—函数、类、全局变量。
示例如下:
import wc_module01
import wc_module02wc_module01.say_hello()
wc_module02.say_hello()
print(wc_module01.title)
print(wc_module02.title)
print(wc_module01.Student())
print(wc_module02.Teacher())
输出如下:
hello wc01
hello wc02
旺财模块01
旺财模块02
<wc_module01.Student object at 0x1030522e8>
<wc_module02.Teacher object at 0x1030522e8>
2.2 from…import
2.2.1 导入
如果希望从某一个模块导入部分指定工具,可以使用from import
的方式,如下:
from 模块名 import 工具名
示例如下:
from wc_module01 import say_hello
from wc_module02 import Teacher
2.2.2 使用
通过这种方式导入,不需要再通过模块名
,可以直接使用其提供的工具—函数、类、全局变量
示例如下:
from wc_module01 import say_hello
from wc_module02 import Teachersay_hello()
print(Teacher())
输出结果为:
hello wc01
<wc_module02.Teacher object at 0x103937668>
2.3 from…import *
from module import *
是指一次性导入模块的所有工具,该方式不建议使用,一个是效率问题,再一个也不方便问题排查,这里也就不再赘述了。
三、模块扩展
3.1 搜索路径
当导入一个模块时,Python解释器对模块的搜索(加载)顺序如下:
- 当前目录
- 如果不在当前目录,Python则搜索shell变量
PYTHONPATH
下的每个目录 - 如果都搜索不到,Python则会查看默认路径,在
Linux
中,默认路径一般为/usr/local/lib/python/
有了如上加载顺序,我们在开发过程中,也需要主要模块名的命名,不要与系统的模块名重名。
示例:
import random# 生成一个 0~10 的数字
rand = random.randint(0, 10)print(rand)
如果当前目录存在random.py
文件的话,那么此时程序运行就会挂掉了。因为这个时候,Python解释器会加载当前目录下的random.py
,而不会加载系统的random
模块。
3.2 加载顺序
如果两个模块存在同名函数,那么后导入的模块会覆盖之前导入模块的函数,其他全局变量、类也是同样的道理。
在开发时,导入模块相关代码应统一写在代码的顶部,通过开发工具,更能及时发现问题。
3.3 别名
如果模块名过长或两个模块存在同名冲突时,可以通过as
关键字给其中一个模块起别名的方式解决。
from 模块名 import 工具名 as 别名
这样,后续可以通过别名进行模块工具的调用。
示例如下:
from wc_module01 import say_hello as hello01hello01()
3.4 模块规范
通过之前的描述,已经知道,每一个python文件都是一个模块,那么在导入模块时,模块中所有没有任何缩进的代码都会被执行一遍。
在实际开发中,模块开发人员会做一些测试代码,而这些测试代码又不希望在模块被引用时被动执行,此外对于调用者来说,是不应该看到或执行这些测试代码的,那么应该怎么做呢?
接下来,__name__
隆重出场了。
__name__
是Python的一个内置属性,记录着一个字符串- 如果是被其他文件导入的,
__name__
的值就是模块名 - 如果是当前执行的程序,那么
__name__
的值就是__main__
因此,在很多Python文件中会看到以下格式的代码:
# 导入模块
# 定义全局变量
# 定义类
# 定义函数# 在代码的最下方
def main():# ...pass# 根据 __name__ 判断是否执行下方代码
if __name__ == "__main__":main()
这样,既方便模块开发者测试,又不会对引入该模块者造成影响。
四、小结
Python中模块开发的好处多多,优点多多,总结起来如下:
- 提高了代码的可维护性
- 提取重复或工具代码,提高开发效率
- 通过
as
关键字,可以在不同模块存在相同的函数名和变量名。但切记不要和系统内置的模块名称重复。
Python模块(Module)详解相关推荐
- python怎么导入文件-Python模块导入详解
定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...
- python怎么导入视频-Python模块导入详解
定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...
- python中configparser详解_Python中的ConfigParser模块使用详解
1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...
- python中importlib模块安装_Python中标准模块importlib详解
Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...
- python标准库对象导入语句_Python标准库之Sys模块使用详解
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...
- python shelve模块_python3 shelve模块的详解
python3 shelve模块的详解 一.简介 在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了.如果 ...
- python3 json模块_详解python 3.6 安装json 模块(simplejson)
JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反 ...
- python发邮件详解 -- smtplib和email模块
文章目录 python发邮件详解,-->smtplib和email模块 1.python发邮件所需要的基础包 2.smtplib的用法 3.email模块的详细理解和使用 A.MIMEText对 ...
- python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...
一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...
最新文章
- vim的文件中字符串的查找与替换
- 英特尔:谁说深度学习已死?AI任务挑大梁的是CPU,不是GPU
- ROS学习(十四):ROS Spinning
- phpnow升级mysql版本_PHPnow 升级后 PHP不支持GD、MySQL 枫
- docker下MySQL修改配置并重启生效:表名不区分大小写
- scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)
- 【LeetCode】3月21日打卡-Day6
- CPU VS GPU笔记
- bzoj2299 [HAOI2011]向量 结论 裴蜀定理
- 前端面试准备---浏览器和网络篇(一)
- 支付宝包下了9家报纸的头版,竟然是为了……
- Win10 查看开/关机历史记录、 删除管理员账户密码
- vue报错“NavigationDuplicat: Avoided redundant navigation to current location”解决方法
- 毕业就去当网红?先听听8位95后网红的口述
- h5 life.html,H5 交互页编辑器 AEditor 介绍
- Input上传多个文件
- PXC SST 同步异常trabackup_checkpoints missing. xtrabackup/SST failed on DONOR. Check DONOR log
- 世界第一台民用计算机,世界上第一台计算机
- Failed to load resource: the server responded with a status of 416 (Requested Range Not Satisfiable)
- Linux写文件断电保存,硬盘写到一半时断电,文件系统里会发生什么?
热门文章
- java招聘网站项目_基于jsp的招聘网站-JavaEE实现招聘网站 - java项目源码
- android dumpsys 命令,Android Shell命令dumpsys
- 判断web访问是内网或是外网
- 评名言:大象无形,至刚易折
- RedHat 8安装与配置DHCP
- android n代码执行su,[求助]Runtime exec(su)执行失败
- Spring中的事务及数据库事务的关系
- Windows 内核(WRK)编译
- Java之根据入栈顺序是否能得到出栈顺序
- 思政课资料(思修+毛概+近代史+马原)