zoukankan      html  css  js  c++  java
  • 循环导入问题

    循环导入问题

    一、什么是循环导入?

    60循环导入问题-死循环.jpg?x-oss-process=style/watermark

    # m1.py
    print('from m1.py')
    from m2 import x
    
    y = 'm1'
    
    1. 创建m2的名称空间
    2. 执行m2.py,将执行产生的名字丢到m2.py
    3. 在当前执行文件中拿到m2.x
    # m2.py
    print('from m2.py')
    from m1 import y
    
    x = 'm2'
    
    1. 创建m1的名称空间
    2. 执行m1.py,将执行产生的名字丢到m1.py
    3. 在当前执行文件中拿到m1.y
    # run.py
    import m1
    
    1. 创建m1的名称空间
    2. 执行m1.py,将执行产生的名字丢到m1.py
    3. 在当前执行文件中拿到m1
    • 如果运行run.py,则会报错ImportError: cannot import name 'y'
    • 如果运行m1.py,则会报错ImportError: cannot import name 'x'
    • 如果运行m2.py,则会报错ImportError: cannot import name 'y'

    二、解决方案

    我们可以使用函数定义阶段只识别语法的特性解决循环导入的问题,我们也可以从本质上解决循环导入的问题,但是最好的解决方法是不要出现循环导入。

    2.1 方案一

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

    2.2 方案二

    # m1.py
    print('from m1.py')
    
    
    y = 'm1'
    from m2 import x
    # m2.py
    print('from m2.py')
    
    x = 'm2'
    from m1 import y
    
    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    Codeforces Round #337 (Div. 2) D. Vika and Segments 线段树 矩阵面积并
    HDU 5787 K-wolf Number 数位DP
    python画图
    python文件操作
    python matplotlib绘图
    沟通
    ipython notebook的使用
    生活
    担心承担责任
    Large-scale Scene Understanding (LSUN)
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863724.html
Copyright © 2011-2022 走看看