欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python新手如何理解循環(huán)加載模塊

 更新時間:2020年05月29日 15:22:43   作者:愛喝馬黛茶的安東尼  
在本篇文章里小編給大家整理了關(guān)于Python新手如何理解循環(huán)加載模塊相關(guān)知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。

循環(huán)加載模塊

假設(shè)你有兩個文件,a.py和b.py,在這兩個文件中互相加載對方,例如:

在a.py中:

import b
def f():
return b.x
print f()

在b.py中:

import a
x = 1
def g():
print a.f()

首先,我們試著加載a.py:

>>> import a
1

沒有問題。也許讓人吃驚,畢竟有個感覺應(yīng)該是問題的循環(huán)加載在這兒。

事實(shí)上在Python中僅僅是表面上的出現(xiàn)循環(huán)加載并不是什么問題。如果一個模塊以及被加載了,Python不會傻到再去重新加載一遍。但是,當(dāng)每個模塊都想要互相訪問定義在對方里的函數(shù)或者變量時,問題就來了。

讓我們再回到之前的例子,當(dāng)我們加載a.py時,它再加載b.py不會有問題,因?yàn)樵诩虞db.py時,它并不需要訪問a.py的任何東西,而在b.py中唯一的引用就是調(diào)用a.f()。但是這個調(diào)用是在函數(shù)g()中完成的,并且a.py或者b.py中沒有人調(diào)用g(),所以這會兒心情還是美麗的。

但是當(dāng)我們試圖加載b.py時(之前沒有加載a.py),會發(fā)生什么呢:

>>> import b
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "b.py", line 1, in <module>
  import a
   File "a.py", line 6, in <module>
  print f()
   File "a.py", line 4, in f
  return b.x
AttributeError: 'module' object has no attribute 'x'

恭喜你,出錯了。這里問題出在加載b.py的過程中,Python試圖加載a.py,并且在a.py中需要調(diào)用到f(),而函數(shù)f()又要訪問到b.x,但是這個時候b.x卻還沒有被定義。這就產(chǎn)生了AttributeError異常。

解決的方案可以做一點(diǎn)細(xì)微的改動。改一下b.py,使得它在g()里面加載a.py:

x = 1
def g():
  import a  
# 只有當(dāng)g()被調(diào)用的時候才加載
  print a.f()

這會兒當(dāng)我們加載b.py的時候,一切安好:

>>> import b
>>> b.g()
1  
# 第一次輸出,因?yàn)槟Ka在最后調(diào)用了‘print f()'
1  
# 第二次輸出,這是我們調(diào)用g()

知識點(diǎn)擴(kuò)充:

1、使用系統(tǒng)函數(shù)__import_()

stringmodule = __import__('string')

2、使用imp 模塊

import imp
stringmodule = imp.load_module('string',*imp.find_module('string'))

3、使用exec

import_string = "import string as stringmodule"
exec import_string

到此這篇關(guān)于Python新手如何理解循環(huán)加載模塊的文章就介紹到這了,更多相關(guān)Python循環(huán)加載模塊詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論