|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# a.py
import b
def x():
print('x')
b.y()
# b.py
import a
def y():
print('y')
a.x() //错误程序
----------------------------------------------
----------------------------------------------
# a.py
import b
def x():
print('x')
if __name__ == "__main__":
b.y()
# b.py
import a
def y():
print('y')
if __name__ == "__main__":
a.x() //修改后程序
小甲鱼解释:因为在执行 b.py 的加载过程中,需要创建新的模块对象 b,然后执行 b.py 对应的字节码。当遇到第一条语句(import a)的时候,Python 会转而去导入 a.py 并生成模块对象 a。同样遇到第一条语句(import b)的时候,Python 就跑去导入模块 b,此时发现 b 模块已经导入(在 sys.modules 中存在),继而执行 b 模块的字节码,当执行到 a.x() 的时候,由于模块 a 此时并未完全导入,所以抛出 AttributeError 异常。 )
没怎么看懂 怎么算是完全导入 流程是什么 就算加上if __name__ == "__main__": 不也是要执行a.x()么
|
|