python加载模块方法,python自动加载模块

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: