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

    什么是循环导入?

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

    解决方法

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

    #m1.py
    def f2():
        from m2 import y 
        print(y)
    x = 10
    f2()
    
    #m2.py
    y = 20
    def f1():
        from m1 import x
        print(x)
    f1()
    
  • 相关阅读:
    2019 西安邀请赛 D
    time 库
    字符串处理+格式化输出
    数据类型
    turtle1
    格式问题
    字符串1
    基础操作
    链表去重
    PAT 1093
  • 原文地址:https://www.cnblogs.com/aden668/p/11358609.html
Copyright © 2011-2022 走看看