模块的导入方法
Posted xufengnian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块的导入方法相关的知识,希望对你有一定的参考价值。
1.模块的使用
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)
2.在模块第一次导入时会做三件事,重复导入会直接饮用内存中已经加载好的结果
1)为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间
2)在新创建的命名空间中执行模块中包含的代码
3)创建名字spam来引用该命名空间
这个名字和变量名没什么区别,都是‘第一类的’,且使用spam.名字的方式可以访问spam.py文件中定义的名字。
3.被导入模块有独立的名称空间
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量在被导入时,与使用者的全局变量冲突
4.为已经导入的模块起别名
import sapm as f print(f.x)
5.在一行导入多个模块
import time,sys,re
6.from...import...
from django import *
大部分情况下不要用导入*的方式,因为不知道导入的是什么名字,很有可能会覆盖掉之前已经定义的名字,而且可读性极其的差。
from import和import的对比
唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了,无需加前缀:spam
7.模块循环导入问题
解决方案一:把循环导入的语句放到最后。有循环导入的问题,本质上就是导入时,这个变量还没被定义,所以,先让所有变量定义好,然后再导入。
解决方案二:将循环导入语句放到函数内。这是因为函数在定义时只检测语法,不执行函数体。
8.区分python文件的两种用途
1)当文件是被执行文件时
if __name__ == ‘__main__‘:
然后执行下面的代码
2)当文件是被导入文件时
if __name__ == ‘__main__‘:
不会执行该行下面的代码
9.模块的搜索路径
模块的查找顺序是:内存中已经加载的模块——》内置模块——》sys.path路径中包含的模块
在第一次导入某个模块(比如spam),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用,如果没有,解释器则会查找同名的内建模块。如果还没有找到就从sys.path给出的目录列表中依次寻找spam.py文件。
其中sys.path中第一个值是当前执行文件所在的文件夹。
强调:所有被导入的模块参照环境变量sys.path都是以执行文件为准的
10.模块的绝对导入(以执行文件的sys.path为起始点开始导入,称之为绝对导入)
应用:执行文件与被导入的模块中都可以使用
缺点:所有导入都是以sys.path为起始点,导入麻烦
把被导入模块的文件夹加入sys.path中
import sys sys.path.append(r‘D:SH fullstack_3qi上课week01day01 est‘) from dir1 import m1 m1.f1()
11.相对导入:参照当前所在文件的文件夹为起始开始查找,称之为相对导入
符号:.代表当前所在文件的文件夹,..代表上一级文件夹 ...代表上一级的上一级文件夹
缺点:只能在被导入的模块中使用,不能在执行文件中用
优点:导入更加简单
以上是关于模块的导入方法的主要内容,如果未能解决你的问题,请参考以下文章
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段