学习python的第十八天(模块导入及使

发布时间:2019-06-10 20:36:11编辑:auto阅读(1407)

    06.05自我总结

    一.模块导入及使用

    1.模块导入的两种方式

    我们拿time模块并使用其中的time功能进行举例

    a)第一种

    import time
    print(time.time)

    import首次导入模块发生了3件事:

    1. 打开模块文件
    2. 执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间
    3. 在程序中会有一个模块名称指向模块名称空间(如果他是import time as f)则是f指向模块空间
    4. 在当前执行文件中拿到一个模块名

    b)第二种

    from time import time
    print(time)

    from...import...首次导入模块发生了3件事:

    1. 以模块为准创造一个模块的名称空间
    2. 执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间
    3. 在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,意味着可以不用加任何前缀而直接使用
    • 优点:不用加前缀,代码更加精简
    • 缺点:容易与当前执行文件中名称空间中的名字冲突

    c)相同点和不同点

    相同点:

    1. 两者都会执行模块对应的文件,两者都会产生模块的名称空间
    2. 两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关

    不同点

    1. import需要加前缀;from...import...不需要加前缀

    2.关键字

    _all_

    如果一个模块的文件内写有_all_
    import 模块名字,默认导入所有模块
    而当模块中出现_all_时候,他只会导入_all_后面列表内的名称

    二.模块循环导入

    1.情况

    创建两个模块

    # m1.py
    print('from m1.py')
    from m2 import x
    
    y = 'm1'
    # m2.py
    print('from m2.py')
    from m1 import y
    
    x = 'm2'

    应用程序导入模块

    # run.py
    import m1

    2.解决办法

    第一种

    把m1中吧form m2 import x 将能找到的y放置form m2 import x,上面,让他在没有导入模块的时候就发现y从而不会寻找
    # m1.py
    print('from m1.py')
    y = 'm1'
    from m2 import x

    第二种

    把from m2 import x 用函数把他变成局部,文件加载顺序先全局在局部
    def f1():
        from m2 import x
    y = 'm1'
    f()

    三.模块搜索路径

    去内存中找去→内置模块中找→去环境变量中找

    打印环境变量

    import sys
    print(sys.path)

    四.python文件的两种用途

    1.模块文件

    2.运行文件

    搜索路径以运行文件为基准

    五.关键字_name_

    在执行文件中_name_会被读取成'__main__'

    在导入模块的时候__name__会变成模块名字

关键字