一、 什么是模块

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


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

最新文章

  1. spring 学习总结
  2. Vue 国际化 vue-i18n 用法详解
  3. bzoj 4591: [Shoi2015]超能粒子炮&#183;改 [lucas定理]
  4. Groovy学习笔记-Java 5新特性支持
  5. 工控随笔_08_西门子_Win10安装Step7.V5.6中文版授权管理器不能正常启动
  6. Leetcode#53.Maximum Subarray(最大子序和)
  7. c# 之partial(分部代码和分部类)
  8. 分布式系统登录功能拦截器的实现以及cookie的共享问题(利用cookie实现session在分布式系统的共享)
  9. 记录 am335x 因为 pinmux 配置不对导致 不断的原因
  10. 使用PDFminer3k解析pdf为文字遇到:WARING:root:GBK-EUC-H
  11. python闭包closure
  12. json 与 string 互转
  13. 深入理解SpringBoot配置
  14. js实现分页的几个源码,看完基本就懂了
  15. jquery类似方法的比较(二)
  16. Python背景知识——学习笔记
  17. idea配置mave
  18. Python学习-str与byte类型以及编码
  19. webstorm javascript IDE调试
  20. Hadoop1的安装

热门文章

  1. Python - Git仓库忽略提交规则 &amp; .gitignore配置
  2. currentColor在CSS的含义
  3. 这个Map你肯定不知道,毕竟存在感确实太低了。
  4. MyBatis——MyBatis开发流程
  5. 邻居子系统1.5 neigh output
  6. IP 层收发报文简要剖析5--ip报文发送2
  7. 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
  8. MySQL 的常用引擎
  9. SQL注入学习-Dnslog盲注
  10. 这些Servlet知识你一定要知道,金九银十大厂面试官都爱问