一、 什么是模块

Python中的模块即单个的Python代码文件,为什么称为模块呢?这是因为在Python中,每个独立的Python文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间和作用域,导入后可以通过:模块名.变量、模块名.函数访问模块内的变量和调用模块内的函数。

二、 模块的导入方法

  1. import 模块名1,…,模块名n,导入多个模块的所有成员;
  2. import模块名as 模块别名,给导入模块起一个别名,如:
if filetype == 'xml':
import xmlreader as reader
elif filetype == 'csv':
import csvreader as reader
data=reader.read_date(filename)

上面两种方法导入的模块会在导入调用方之外创建独立的名字空间,名字空间可以按模块名或模块别名的方式访问,调用模块的成员时需要加”模块名.”或“模块别名.”调用。

  1. from 模块名 import 成员1,…,成员n,导入模块的多个成员;
  2. from 模块名 import *,导入模块的所有允许导入成员;
  3. from模块名import 成员 as 成员别名,给导入的成员起一个别名

    上面三种方法导入的成员的名字空间为导入者的名字空间,调用时无需带模块名,可以在本地直接调用,与本地变量和函数的使用方法相同,但要注意导入成员是否与导入者本身的属性是否相同,否则就会按执行先后顺序进行覆盖,后执行的定义覆盖已有定义。

三、 关于模块导入的注意事项

  1. 一个能正确运行的模块,需要被导入时,必须使得Python能找到该模块对应的文件,这有几种方式可以使用:

    1)通过设置PYTHONPATH环境变量来指定模块对应文件所在的路径,具体怎么设置环境变量,不同的操作系统有不同的方法,老猿在此不进行详细介绍,大家可以在网上搜索找一下;

    2)通过sys.path.append(路径)来将模块对应路径加到python搜索路径;

    3)还可以将模块文件放到sys.path对应的某个路径下。

    以上方法中,对于自定义模块推荐方法一,对于安装Python扩展模块建议方法三,Python建议扩展模块安装到Python安装目录下的Python37\lib\site-packages子目录中(windows路径)或Python37/lib/site-packages(UNIX、Linux路径)。

  2. 执行“import 模块名”或“from 模块名 import ”导入模块时,模块名为不带路径及py后缀的文件名;

  3. 首次执行模块导入时会执行整个模块的代码,因此除了变量、函数及类的定义外,原来在模块编写时的一些执行代码也会被自动执行,为了测试时可以执行这些代码但避免导入时执行这些代码,可以通过在模块文件内判断当前执行代码的模块名来进行有效处理:

    if name == ‘main’:

    这样,当该文件测试时可以执行测试代码,而作为模块加载时则不会执行测试代码;

  4. 每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块;

  5. 模块导入后,使用“import 模块名”导入的内容执行时必须带“模块名.”方式执行,如果是“from 模块名 import ”导入的内容则可以不带,但有可能与导入调用者的内容名字冲突导致覆盖;

  6. 在导入模块后,可以在模块文件所在目录下看到一个名为“pycache”的文件夹,打开该文件夹,可以看到 Python 为每个模块都生成一个“模块名.cpython-37.pyc”(不同版本会有版本号的不同)的文件;

  7. 模块导入后,可以使用方法dir(模块名)查看模块的成员。

四、 案例

我们建立一个importtest.py的文件,将其放到一个PYTHONPATH环境变量指定的目录下,文件内容如下:

def ftest(n):
print("execute ftest function....") print("Now in importtest module!")

然后执行导入并执行其中的函数:

>>> import importtest #首次执行导入会执行模块中所有代码
Now in importtest module!
>>> import importtest #再次执行导入模块代码不会再执行
>>>
>>> ftest(5) #不带模块名无法识别
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
ftest(5)
NameError: name 'ftest' is not defined
>>> importtest.ftest(5)
execute ftest function....
>>>

本节简单介绍了模块的概念和模块的导入,内容并不复杂,几个要点老猿要点出了,希望对大家有所帮助。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

第10.1节 Python的模块及模块导入的更多相关文章

  1. 第10.9节 Python子包的导入方式介绍

    在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...

  2. 第10.8节 Python包的导入方式详解

    一. 包导入与模块导入的关系 由于包本质上是模块,其实对模块的许多导入方法都适用于包,但由于包的结构与模块有差异,所以二者还是有些区别的: 对包的导入,实际上就是包目录下的__init__.py文件的 ...

  3. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  4. 第10.6节 Python包的概念

    一. 引言 在<第10.2节 Python的模块及模块导入>介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要 ...

  5. 第10.3节 Python导入模块能否取消导入?

    模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用"del 模块名"进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删 ...

  6. 第10.4节 Python模块的弱封装机制

    一. 引言 Python模块可以为调用者提供模块内成员的访问和调用,但某些情况下, 因为某些成员可能有特殊访问规则等原因,并不适合将模块内所有成员都提供给调用者访问,此时模块可以类似类的封装机制类似的 ...

  7. 第10.11节 Python模块和包小结

    Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...

  8. 第10.5节 使用__all__定义Python模块导入白名单

    一. 引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白 ...

  9. 第10.10节 Python使用__init__.py自动加载包下内容

    在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件.在<第10.6节 Python包的概念>中介绍了__init__.py文件 ...

随机推荐

  1. Flink基础:时间和水印

    ​ 往期推荐: Flink基础:入门介绍 Flink基础:DataStream API Flink基础:实时处理管道与ETL Flink深入浅出:资源管理 Flink深入浅出:部署模式 Flink深入 ...

  2. 阻塞队列的take、offer、put、add的一些比较

    LinkedBlockingQueue的put,add和offer的区别 最近在学习<<Java并发编程实践>>,有很多java.util.concurrent包下的新类.Li ...

  3. LVM划分磁盘及扩容缩容

    lvm:logical volume monitor 逻辑卷管理器 作用: 采用lvm划分磁盘:磁盘空间不够时,方便扩展磁盘.物理卷加到卷组时被划分等大的pe,即pv是由众多pe构成.pe是卷组的最小 ...

  4. p5.js基本[一] T型高斯分布的小星星

    样例 <script src="./p5/p5.js"></script> <script> function setup() { // 只写一 ...

  5. configure.ac和Makefile.am的格式解析概述

    1. configure.ac和Makefile.am的格式解析概述 1.1. Autotools相关工具链 1.1.1. Autotools 1.1.2. 其他相关工具 1.2. 工具链的流程 1. ...

  6. 面试半年!三面阿里,四面蚂蚁金服,居然倒在了一个Java集合之Map上?

    Map接口 Map与Collection并列存在.用于保存具有映射关系的数据:key-valueMap中的key和value都可以是任何引用类型的数据Map中的key用set来存放,不允许重复,即同一 ...

  7. The Life out of coding_Employment_01

    1.工作与个人价值 软技能读书笔记第一篇:--From 安晓辉 内生涯与外生涯 内生涯包括知识.技能.工作经验.心理素质.内心情感.行为习惯.视野.观念.职业心态.职业成熟度.心灵成长. 外生涯包括职 ...

  8. 关于oracle11g 和sqldeverloper的安装配置

    0友情提示:以下下载地址都是我的百度云分享链接安全无毒请放心下载! 电脑配置 win10 jdk版本1.7 下载oracle11G 版本 下载地址:安装很简单 sqldverloper(oracleD ...

  9. IDM下载器的自定义设置

    IDM(Internet Download Manager)下载器主窗口的左侧是下载类别的分类,提供了分类功能来组织和管理文件.如果不需要它,可以删除"分类"窗口,并且在下载文件时 ...

  10. 通过Camtasia来添加各种各样的光标效果

    在十几二十年前的时候,我们想要学习新的知识需要到学校和培训班才行,但是现在只要有一台电脑.一部手机或者平板,我们在家里也能找到我们喜欢的课程来学习了,微课也因此而生. 同样的,有了想要学习知识的学生, ...