模块的导入方法

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(rD:SH fullstack_3qi上课week01day01	est)
from dir1 import m1
m1.f1()
View Code

11.相对导入:参照当前所在文件的文件夹为起始开始查找,称之为相对导入

  符号:.代表当前所在文件的文件夹,..代表上一级文件夹    ...代表上一级的上一级文件夹

  缺点:只能在被导入的模块中使用,不能在执行文件中用

  优点:导入更加简单

 

以上是关于模块的导入方法的主要内容,如果未能解决你的问题,请参考以下文章

Python 常用模块学习

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

Python学习(22):模块

JMeter:逻辑控制器_模块控制器(Module Controller)

模块的种类和导入方法

python之模块导入方法总结