模块介绍

Posted on 2019-01-18 17:05  杜卡迪S11  阅读(123)  评论(0编辑  收藏  举报

常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,文件名为spam,可以通过import spam使用

模块分类:(四个通用类别)

1、使用python编写的.py文件

2、已被编译为共享库或DLL的C或C++扩展

3、把一系列模块组织到一起的文件(注:文件下有一个__init__.py文件,该文件夹称之为包)

4、使用C编写并链接到python解释器的内置模块

为什么要使用模块

1、从文件级别组织程序,更方便管理

2、可以下载导入别人写好的模块,提升开发效率

模块之import

1、import的使用

模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,他们只在模块名第一次遇到导入import语句时才执行(第一次导入 import模块名就加载到内存中了,后续的import语句只是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)

如:

import spam
import spam
import spam

'''
执行结果:
from the spam.py
'''

2、在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果

  (1)、为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间

  (2)、在新创建的命名空间中执行模块中包含的代码,见初始导入import spam     

提示:导入模块时到底执行了什么?
    In fact function definitions are also ‘statements’ that are 
    ‘executed’; the execution of a module-level function definition 
    enters the function name in the module’s global symbol table.
    事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放
    入模块全局名称空间表,用globals()可以查看

  (3)、创建名字spam来引用该命名空间

3、被导入模块有独立的名称空间

  每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会被导入时,与使用者的全局变量冲突

4、为模块起别名

  为已经导入的模块起别名的方式对编写可扩展的代码很有用

5、在一行导入多个模块