python加载模块方法,python自动加载模块
循环加载模块
假设您有两个文件,a.py和b.py,在这两个文件中可以相互加载,例如:
在a.py中:
进口b
deff():
returnb.x
Printf()在b.py中:
重要的
x=1
定义():
Printa.f()首先,我们尝试加载一个. py:
重要的
?1没问题。也许令人惊讶,毕竟,这里有一个感觉像是加载问题的循环。
事实上,在Python中,循环加载不仅仅是表面上的问题。如果加载了一个模块,Python不会傻到再重新加载。但是,当每个模块都想访问另一个模块中定义的函数或变量时,问题就出现了。
相关:《Python视频教程》
让我们回到前面的例子。当我们加载a.py时,它再加载b.py就没有问题了,因为加载b.py时它不需要访问a.py中的任何东西,b.py中唯一的引用就是调用a.f()。但是这个调用是在函数g()中完成的,a.py和b.py都没有人调用g(),所以此刻的心情还是美好的。
但是当我们试图加载b.py (a.py之前没有加载)时会发生什么呢:
进口b
回溯(mostrecentcalllast):
文件 stdin ,第1行,在模块中
文件 b.py ,第1行,在模块中
重要的
文件 a.py ,第6行,在模块中
printf()
文件 a.py ,第4行,inf
returnb.x
错误:“模块”objecthasnoattribute“x”祝贺您,有一个错误。这里的问题出在加载b.py的过程中,Python试图加载a.py,需要在a.py中调用f(),函数f()要访问b.x,但此时b.x还没有定义。这将引发AttributeError异常。
解决方案可以稍作改动。更改b.py,使其在g()中加载a.py:
x=1
定义():
重要的
#仅在调用g()时加载
Printa.f()在我们加载b.py的那一刻,一切正常:
进口b
英国地质学会
一个
#第一次输出,因为模块A末尾调用了 printf()
一个
#第二个输出,这是我们对G()相关推荐的调用:
Python新手常见问题6:关闭时绑定变量
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。