模块的导入

发布时间:2019-05-16 21:35:08编辑:auto阅读(1934)

    一.模块导入的过程

    (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() 
    View Code

    示例二:

    假设有两个模块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)
    View Code

    (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__':

     

关键字