一.模块导入的过程
(1).先从sys.modules里查看模块是否已经被导入
(2).如果没有被导入,就依据sys.path路径寻找模块
(3).找到了模块就导入
(4).创建这个模块的命名空间
(5).执行文件,把文件中的名字都放到命名空间里
import sys
print(sys.modules.keys())
print(sys.path)
二.模块导入的方法
所有的模块导入都应该尽量往上写
导入的顺序依次向下:
内置模块
扩展模块
自定义模块
1.import
(1).import 模块名
模块名.变量名——和本文件中的变量名完全不冲突
(2).import 模块名 as 重命名的模块名
提高代码的兼容性
示例一:
有两个sql模块mysql和oracle,根据用户的输入,选择不同的sql功能
#mysql.py
def sqlparse():
print('from mysql sqlparse')
#oracle.py
def sqlparse():
print('from oracle sqlparse')
#test.py
db_type=input('>>: ')
if db_type == 'mysql':
import mysql as db
elif db_type == 'oracle':
import oracle as db
db.sqlparse()
示例二:
假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如
if file_format == 'xml':
import xmlreader as reader
elif file_format == 'csv':
import csvreader as reader
data=reader.read_date(filename)
(3).import 模块1,模块2
2.from import
(1).from 模块名 import 变量名
直接使用 变量名 就可以完成操作
如果本文件中有相同的变量名会发生冲突
(2).from 模块名 import 变量名 as 重命名变量名
(3).from 模块名 import 变量名1,变量名2
(4).from 模块名 import *
将模块中的所有变量名都放到内存中
如果本文件中有相同的变量名会发生冲突
from 模块名 import * 和 __all__ 是一对,没有这个变量,就会导入所有的变量名
如果有__all__ 只导入__all__ 列表中的名字
三、__name__
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
__name__ =='__main__'
当做模块导入:
__name__== 模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':