python之路21--之模块导入

模块导入

模块导入原理

        python是通过sys.path的路径找到模块,然后读取模块(读取到专属的命名空间里)以导入demo模块为例:该模块里的所有功能都需要通过demo.功能函数名来实现调用

        一个模块出现多次导入,python首先到sys.modules查看要导入的模块存不存在,如果存在就不重复导入了,不存在就到sys.path路径里去找模块,找到就导入(导入之前执行文件并将文件内容写入独有命名空间),找不到就报错

        如果模块里和调用的脚本里出现一样变量,通过模块调用:(模块优先找模块本地的),程序本地调用:(程序优先找程序本地的)

导入模块的顺序

        模块的导入语句应尽量写在程序的开头:方便看该程序都导入了哪些模块,

        导入模块的顺序应按照如下顺序:

  •                                              import 内置模块
  •                                              import 扩展模块(使用pip可以安装的模块)
  •                                              import 自己写的模块

模块导入的几种方法

        1、import 模块         :执行该模块,并将该模块加入到独有的内存空间中实现导入 ,如果导入的模块比较大会比较占用内存空间;     

import time
print(time.time())       #打印时间戳

        2、import 模块 as 模块别名          :执行该模块,并将该模块加入到独有的内存空间中并用as方法给重命名实现导入,如果导入的模块比较大也会比较占用内存空间  注意:重命名后只能使用重命名的变量,不可以使用之前的调用方式;

import time as t
print(t.time())       #打印时间戳,和time.time()一样,但是在这里必须使用别名调用

        3、from 模块 import 模块下的方法          :单独导入模块下的某一个方法,优点:节省内存空间,缺点:如果当前导入该方法的程序里定义了和该方法一样名字的变量或函数会在当前程序里覆盖了这个导入的功能;

from time import time
print(time())        #打印时间戳和time.time()一样的结果

        4、from 模块 import 模块下的方法 as 模块下方法的别名          :单独导入模块下的某一个方法,并用as重命名这个方法,优缺点同第三条,注意:重命名后只能使用重命名的变量,不可以使用之前的调用方式;

from time import time as ti
print(ti())           #打印时间戳,和time.time()一样的结果

        5、from 模块 import *        :导入模块下的所有方法,调用方法需要用:方法()来调用,可以和__all__ = ["方法1","方法2","方法3"]配合使用来实现哪些方法可调用(列表里的方法可调用),哪些方法不可调用(列表里没有的方法不可调用);

import time
print(time())           #打印时间戳,只是这里将time下的所有功能都导入进来了

导入多个模块

        导入多个模块时应尽量使用每行导入一个模块的写法,1、方便看,2、便于以后修改代码

1、第一种导入多个模块的写法
import time,os,sys
说明:这种导入模块的方法虽然也可以,但是不便于以后修改代码,如果我想去掉os模块就只能删除os模块,

2、第二种导入多个模块的写法
import time
import os
import sys
说明:这种写法方便看代码(一目了然),如果想去掉time模块直接在前面注释就可以了(方便改代码)

 导入模块下的多个功能

方法一:
from 模块 import 功能1,功能2             #导入该模块下的功能1和功能2

方法二:
from 模块 import *           #导入该模块下的所有功能,和import 模块类似,但是使用功能的方法不一样了

import 模块后的调用模块下的功能的方法为:模块.功能()
from 模块 import 功能后的调用功能的方法为:方法()

from demo import *         #可以和__all__ = ["func","test1","test2"]配合使用,__all__ = ["func","test1","test2"]列表里的内容表示允许使用from 模块 import * 所调用的,如果不在列表里的名字,使用from 模块 import * 后也不可以调用,再被调用的模块里加入了__all__后使用import导入不受影响,只影响from 模块 import *
func()
print(test1)
print(test2)
print(test3)

模块调试时有默认输出内容,如何实现程序导入后在程序里不打印默认内容,只有在调用方法时执行方法

在模块里的默认内容处加入如下代码,将默认内容包起来
if __name__ == "__main__":
    print("打印默认内容")
else:pass
说明:在模块里有一个变量__name__,当我们在模块本地执行这个变量时,print(__name__) ,结果为:__main__      在其他程序里引用这个模块时,调用引用模块下的__name__变量时,print(__name__),结果为:引用模块的名字      我们可以根据这个特性来指定是否输出一些不想打印的内容

 

posted @ 2018-09-03 09:41  欧-阳  阅读(128)  评论(0)    收藏  举报