日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:Python新手常見問題七:循環(huán)加載模塊

循環(huán)加載模塊

假設你有兩個文件,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

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

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

相關推薦:《Python視頻教程》

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

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

>>> import b
Traceback (most recent call last):
      File "", line 1, in 
      File "b.py", line 1, in 
    import a
      File "a.py", line 6, in 
    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異常。

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

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

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

>>> import b
>>> b.g()
1   
# 第一次輸出,因為模塊a在最后調(diào)用了‘print f()’
1   
# 第二次輸出,這是我們調(diào)用g()

相關推薦:

Python新手常見問題六:閉包時綁定變量


新聞名稱:創(chuàng)新互聯(lián)Python教程:Python新手常見問題七:循環(huán)加載模塊
網(wǎng)頁地址:http://m.5511xx.com/article/cdjcsse.html