Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。

通过这些强大的模块可以极大地提高开发者的开发效率。

一、模块的概念

模块,英文为 Modules,是 Python 程序架构的一个核心概念。

至于模块到底是什么,可以用一句话总结:模块就是 Python 程序,每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块。

换句话说,任何 Python 程序都可以作为模块。

模块可以比作一盒积木,通过它可以拼出多种主题的玩具,这与函数不同,一个函数仅相当于一块积木,而一个模块中可以包含多个函数,也就是很多积木。

模块名同样也是一个标识符,需要符合标识符的命名规则。

在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具。

模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。

二、模块的导入方式

1、import 导入

import 模块名1, 模块名2 

导入之后,通过 模块名. 的方式使用模块提供的工具 —— 全局变量、函数、类。

使用 as 指定模块的别名

如果模块的名字太长,可以使用 as 指定模块的名称,以方便在代码中的使用。

import 模块名1 as 模块别名

注意:模块别名应该符合大驼峰命名法。

2、from...import 导入

如果希望从某一个模块中,导入部分工具,就可以使用 from ... import 的方式。

import 模块名是一次性把模块中所有工具全部导入,并且通过 模块名/别名 访问。

# 从 模块 导入 某一个工具from 模块名1 import 工具名

导入之后,不需要通过 模块名. 的方式来调用工具,可以直接使用模块提供的工具 —— 全局变量、函数、类。

如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数。

在开发时, import 代码应该统一写在代码的顶部,这样可以更容易地及时发现冲突。一旦发现冲突,可以使用 as 关键字给其中一个工具起一个别名。

import 导入所有工具

# 从 模块 导入 所有工具from 模块名1 import *

不过,这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查。

3、模块的搜索顺序

Python 的解释器在导入模块时,会:
搜索当前目录指定模块名的文件,如果有就直接导入,
如果没有,再搜索系统目录。

在开发时,给文件起名,不要和系统的模块文件重名。

示例:

import random# 生成一个 0~10 的数字rand = random.randint(0, 10)print(rand)

上面的代码,如果在当前目录下,存在一个 random.py 的文件,程序就无法正常执行了!

这个时候,Python 的解释器会加载当前目录下的 random.py 而不会加载系统的 random 模块。

Python 中每一个模块都有一个内置属性 __file__ 可以查看模块的完整路径。

import randomprint(random.__file__)# D:pythonlibandom.py

4、原则 —— 每一个文件都应该是可以被导入的

一个独立的 Python 文件就是一个模块,在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍!

在实际开发中,每一个模块都是独立开发的,大多都有专人负责。开发人员通常会在模块下方增加一些测试代码,仅在模块内使用,而被导入到其他文件中不需要执行。

在 Python 中有一个 __name__ 属性,__name__ 属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行!

__name__ 是 Python 的一个内置属性,记录着一个字符串。

如果是被其他文件导入并执行的,那么__name__ 就是模块名,
如果是直接执行当前程序,那么 __name__ 是 '__main__'。

所以在很多 Python 文件中都会看到以下格式的代码:

# 导入模块# 定义全局变量# 定义类# 定义函数# 在代码的最下方def main():    # ...    pass# 根据 __name__ 判断是否执行下方代码if __name__ == "__main__":    main()

三、模块的价值

经过之前的学习,我们已经能够将 Python 代码写到一个文件中。

但随着程序功能的复杂,程序体积会不断变大,为了便于维护,通常会将其分为多个文件(模块),这样不仅可以提高代码的可维护性,还可以提高代码的可重用性。

代码的可重用性体现在,当编写好一个模块后,只要编程过程中需要用到该模块中的某个功能(由变量、函数、类实现),无需做重复性的编写工作,直接在程序中导入该模块即可使用该功能。

之前学习过面向对象的封装,并且还介绍了很多具有封装特性的结构,比如说:

诸多容器,例如列表、元组、字符串、字典等,它们都是对数据的封装。

函数是对 Python 代码的封装。

类是对方法和属性的封装,也可以说是对函数和数据的封装。

而这里的模块,可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块。

这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。

最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助。

python modbus类封装_Python 中引入一个文件,模块的概念相关推荐

  1. python modbus类封装_Python | 面向对象程序设计来了!

    当当当,技术小E又来了! 经过前几次的基础贴的培训 相信很多同学对python的基础知识 已经有了一个简单的认识 那么下面我们来讲一讲 python面向对象程序设计. 我们在写程序的时候一般有两种方式 ...

  2. python zipfile教程_Python中zipfile压缩文件模块的基本使用教程

    zipfile Python 中 zipfile 模块提供了对 zip 压缩文件的一系列操作. f=zipfile.ZipFile("test.zip",mode="&q ...

  3. python 写txt 换行_python中写入txt文件需要换行,以及\r 和\n

    在Python中,用open()函数打开一个txt文件,写入一行数据之后需要一个换行 如果直接用 f.write('\n') 只会在后面打印一个字符串'\n',而不是换行' 需要用 f.write(' ...

  4. 使用python处理wps表格_python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxlopenpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂件 ...

  5. 7_less中引入其他文件 / 模块

    在less中引入(这玩意你可以引入文件名,加不加好慢的扩展名都可以,或者你直接引入要用的模块之类的): // 四种导入方式都可以 //@import "triangle.less" ...

  6. python ftp模块_python中的FTP文件模块

    Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接from ftplib import FTP #加载 ...

  7. python scikit learn 封装_python的scikit-learn的主要模块和基本使用

    在从事数据科学的人中,最常用的工具就是R和Python了,每个工具都有其利弊,但是Python在各方面都相对胜出一些,这是因为scikit-learn库实现了很多机器学习算法. 加载数据(Data L ...

  8. python判断最后一行_python中如何判断文件的最后一行是空行?

    问题: 前两天遇到一个问题,比如dat和bcp文件的格式需要最后一行一定是空行.但是用python怎么也不能读到最后一行的空行. test1: file_obj = open(file_name) a ...

  9. python处理nc数据_python中的.nc文件处理 | 04 利用矢量边界提取NC数据

    利用矢量边界提取.nc数据 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt impor ...

最新文章

  1. easyui datagrid checkbox的相关属性整理
  2. slab 内存分配器介绍(一)
  3. Windows核心编程 第十二章 纤程
  4. JAVA调用c/c++代码
  5. 北大OJ百练——2721:忽略大小写比较字符串大小
  6. 用户故事的扩展-新的故事类别
  7. 高效组织的配置管理计划
  8. java8-Optional
  9. BZOJ 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(最大生成树)
  10. Yearn已完成对于6666枚YFI的增发
  11. HR_Hash Tables: Ransom Note
  12. redis新数据类型-bitmaps
  13. 想做数字孪生项目?这款数据可视化软件值得你了解
  14. 太极发送卡片软件_xml卡片消息制作软件下载-qq xml卡片消息生成器最新版0.8.10.209 免费版-东坡下载...
  15. HTML5表白小程序
  16. java 中subtract_Java.math.BigDecimal.subtract()方法实例详解
  17. 计算机视觉面试经验汇总(一)
  18. Android显示横幅样式通知
  19. tornado源码分析-Application
  20. 1月重磅福利——Softing在线培训课程上线

热门文章

  1. mysql状态常用参数分析
  2. FileReader对象和FormData对象
  3. Oracle条件查询语句-where
  4. CentOS-7.2、7.5模板机制作
  5. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
  6. PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换
  7. 移动端app设计指南
  8. 网站社区类产品管理经验
  9. ArcGis辅助编号(半自动)功能的插件式实现
  10. (转)C# Delegate.Invoke、Delegate.BeginInvoke