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__的返回结果是其他模块的模块名

浙公网安备 33010602011771号