python进阶(28)import导入机制原理 _
作者:互联网
前言
在Python中,一个.py文件代表一个Module。在Module中可以是任何的符合Python文件格式的Python脚本。了解Module导入机制大有用处。
1. Module组成
一个.py文件就是一个module。Module中包括attribute, function等。 这里说的attribute其实是module的global variable。
我们创建1个test1.py文件,代码如下
# 定义1个全局变量a a = 1 # 声明一个全局变量moduleName global moduleName # 定义一个函数printModuleName def printModuleName(): print(a + 2) print(__name__) print(moduleName) print(dir())
这里我们定义了3个全局变量a
、moduleName
、printModuleName
,除了我们自己定义的以外还有module内置的全局变量
1.1 Module 内置全局变量
上面我们说到了,每一个模块都有内置的全局变量,我们可以使用dir()
函数,用于查看模块内容,例如上面的例子中,使用dir()
查看结果如下
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'moduleName', 'printModuleName']
其中a, moduleName, printModuleName 是由用户自定义的。其他的全是内置的。下面介绍几个常用的内置全局变量
1.1.1 __name__
指的是当前模块的名称,比如上面的test1.py
,模块的名称默认就是test1,如果一个module是程序的入口,那么__name__=__'main'__
,这也是我们经常看到用到的
1.1.2 __builtins__
它就是内置模块builtins
的引用。可以通过如下代码测试:
import builtins print(builtins == __builtins__)
打印结果为True
,在Python代码里,不需要我们导入就能直接使用的函数、类等,都是在这个内置模块里的。例如:range
、dir
1.1.3 __doc__
它就是module的文档说明,具体是文件头之后、代码(包含import)之前的第一个多行注释
,测试如
highlighter-
模块导入机制测试
当然如果你想查看某个方法的说明,也可以这么使用
1.1.4 __file_
当前module所在的文件的绝对路径
1.1.5 __package__
当前module所在的包名。如果没有,为None。
2. 包package
为避免模块名冲突,Python引入了按目录组织模块的方法,称之为包(package)。包是含有Python模块的文件夹。
当一个文件夹下有init.py
时,意为该文件夹是一个包(package),其下的多个模块(module)构成一个整体,而这些模块(module)都可通过同一个包(package)导入其他代码中。
其中init.py
文件用于组织包(package),方便管理各个模块之间的引用、控制着包的导入行为。