python进阶(28)import导入机制原理 _


前言

在Python中,一个.py文件代表一个Module。在Module中可以是任何的符合Python文件格式的Python脚本。了解Module导入机制大有用处。

1. Module组成

一个.py文件就是一个module。Module中包括attribute, function等。 这里说的attribute其实是module的global variable。
我们创建1个test1.py文件,代码如下

highlighter- Python

# 定义1个全局变量a
a = 1
# 声明一个全局变量moduleName
global moduleName


# 定义一个函数printModuleName
def printModuleName():
    print(a + 2)
    print(__name__)
    print(moduleName)

print(dir())

这里我们定义了3个全局变量amoduleNameprintModuleName,除了我们自己定义的以外还有module内置的全局变量
 

1.1 Module 内置全局变量

上面我们说到了,每一个模块都有内置的全局变量,我们可以使用dir()函数,用于查看模块内容,例如上面的例子中,使用dir()查看结果如下

highlighter- CSS

['__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的引用。可以通过如下代码测试:

highlighter- Python

import builtins
print(builtins == __builtins__)

打印结果为True,在Python代码里,不需要我们导入就能直接使用的函数、类等,都是在这个内置模块里的。例如:rangedir

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),方便管理各个模块之间的引用、控制着包的导入行为。

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293396.html

(0)
上一篇 2022年11月23日
下一篇 2022年11月23日

相关推荐

发表回复

登录后才能评论