文章目录

  • 一、模块概念
  • 二、模块导入与使用
      • 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解释器对模块的搜索(加载)顺序如下:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索shell变量PYTHONPATH下的每个目录
  3. 如果都搜索不到,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)详解相关推荐

  1. python怎么导入文件-Python模块导入详解

    定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...

  2. python怎么导入视频-Python模块导入详解

    定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...

  3. python中configparser详解_Python中的ConfigParser模块使用详解

    1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...

  4. python中importlib模块安装_Python中标准模块importlib详解

    Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...

  5. python标准库对象导入语句_Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...

  6. python shelve模块_python3 shelve模块的详解

    python3 shelve模块的详解 一.简介 在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了.如果 ...

  7. python3 json模块_详解python 3.6 安装json 模块(simplejson)

    JSON 相关概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反 ...

  8. python发邮件详解 -- smtplib和email模块

    文章目录 python发邮件详解,-->smtplib和email模块 1.python发邮件所需要的基础包 2.smtplib的用法 3.email模块的详细理解和使用 A.MIMEText对 ...

  9. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

    一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

最新文章

  1. vim的文件中字符串的查找与替换
  2. 英特尔:谁说深度学习已死?AI任务挑大梁的是CPU,不是GPU
  3. ROS学习(十四):ROS Spinning
  4. phpnow升级mysql版本_PHPnow 升级后 PHP不支持GD、MySQL 枫
  5. docker下MySQL修改配置并重启生效:表名不区分大小写
  6. scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)
  7. 【LeetCode】3月21日打卡-Day6
  8. CPU VS GPU笔记
  9. bzoj2299 [HAOI2011]向量 结论 裴蜀定理
  10. 前端面试准备---浏览器和网络篇(一)
  11. 支付宝包下了9家报纸的头版,竟然是为了……
  12. Win10 查看开/关机历史记录、 删除管理员账户密码
  13. vue报错“NavigationDuplicat: Avoided redundant navigation to current location”解决方法
  14. 毕业就去当网红?先听听8位95后网红的口述
  15. h5 life.html,H5 交互页编辑器 AEditor 介绍
  16. Input上传多个文件
  17. PXC SST 同步异常trabackup_checkpoints missing. xtrabackup/SST failed on DONOR. Check DONOR log
  18. 世界第一台民用计算机,世界上第一台计算机
  19. Failed to load resource: the server responded with a status of 416 (Requested Range Not Satisfiable)
  20. Linux写文件断电保存,硬盘写到一半时断电,文件系统里会发生什么?

热门文章

  1. java招聘网站项目_基于jsp的招聘网站-JavaEE实现招聘网站 - java项目源码
  2. android dumpsys 命令,Android Shell命令dumpsys
  3. 判断web访问是内网或是外网
  4. 评名言:大象无形,至刚易折
  5. RedHat 8安装与配置DHCP
  6. android n代码执行su,[求助]Runtime exec(su)执行失败
  7. Spring中的事务及数据库事务的关系
  8. Windows 内核(WRK)编译
  9. Java之根据入栈顺序是否能得到出栈顺序
  10. 思政课资料(思修+毛概+近代史+马原)