20.模块的引入

import 模块时做的事情:

首先从sys.moduels里查看是否有该模块,若无,在sys.path搜索路径中找到模块,再创建这个模块的命名空间,最后把文件中的名字都放到命名空间里;若已经导入,就不执行

若引入的模块和本地的代码中同名的变量和函数名,模块中的命名空间与本地的命名空间是完全隔离的,同名参数互不影响

 

多次导入模块问题:

写程序时可能会将一个模块多次导入,不会报错,也不会多次导入一个模块,最终只能导入一次。

原因:第一条导入语句执行后,sys.moduels中就存在模块名,后面的导入语句就不会执行

 

给导入的模块起别名:

import 模块 as 别名

如 import time as t     此时t.time()=time.time(),但是代码中已经不可以使用time.time()

此操作可以用来提高代码的兼容性

if 数据库==‘masql’:
    import mysql as db
elif 数据库==‘nosql’:
    import nosql as db
db.connect()  #无论是哪种数据库,都可以使用db对数据库进行操作

 

一行导入多个模块

如import os,os.path,time,sys

实际上,导入模块时是有顺序的:先导入内置模块(os,time,sys),再导入拓展模块,最后导入自己写的模块

不建议使用,降低代码的可读性与增加修改成本

 

单独从某个模块中导入一个方法或变量

from 模块名 import 方法名/变量名 

如from time import sleep   就可以直接使用sleep方法

注意引用的变量名和方法名与本地的变量名会有覆盖作用

 

导入一个模块的全部内容

from 模块名 import * 

如果引用的模块中存在__all__=[]  只有在列表中的内容会被此方法导入,没有该语句就导入所有的内容

 

__name__

如果模块1中有一个变量__name__,当我们直接执行该模块1时,__name__的返回结果是'__main__'

当我们执行其他模块,其他模块导入了模块1,__name__的返回结果是其他模块的模块名

 

posted @ 2020-10-18 21:23  maday  阅读(88)  评论(0)    收藏  举报