我在Python模塊哈瓦兩個全局變量: load.py:蟒蛇進口全局變量,但調用的函數
a = load_a()
b = load_b()
我想在我的測試文件導入: test.py:
from load import a
然而,我發現,b也叫,load_b()
也被稱爲 和load_b()
可能會花費大量的時間 所以我的問題是我怎麼能只加載但不叫load_b()
功能
我在Python模塊哈瓦兩個全局變量: load.py:蟒蛇進口全局變量,但調用的函數
a = load_a()
b = load_b()
我想在我的測試文件導入: test.py:
from load import a
然而,我發現,b也叫,load_b()
也被稱爲 和load_b()
可能會花費大量的時間 所以我的問題是我怎麼能只加載但不叫load_b()
功能
import
總是從上到下執行模塊。加載特定變量的名字也不是沒有可能完全執行模塊:
from load import a
是等價的:
# test.py
import load
a = load.a
你不能只加載一個模塊的一部分,有許多理由這種行爲。例如,您load_a
功能可以使用之前或之後load_a
函數中定義的全局變量:
def load_a(arg):
if arg in table:
# do something here...
table = [1,2,3,4]
load_a
也可以改變可能的全局變量。
的函數對象的內置__module__
名字與這裏居然被定義的功能模塊相關聯,即使您使用from ... import ...
聲明:
>>> from load import a_load
>>> a_load.__module__
'load'
然而,您可以測試標誌,以防止調用load_b
或者你甚至可以用裝飾@
,也有這種情況,當然許多變通方法:
if flag_b
b = load_b()
你應該重新考慮你的設計。如果導入模塊想要做一些初始化,它應該必須這樣做。進口模塊應該只提供工具:
import load
a = load.load_a()
這樣,你的模塊將有較少的意想不到的副作用,並將更具可測試性。
你在那個目錄中有一個空白的'__init__.py'文件嗎? – Exprator
是的,我想只加載一個,但不是B,但是,B也是解釋和load_b()函數調用 –
這是所有正常的Python代碼,定義正常變量。如果你只想導入'b',你認爲'import'會跳過'a = ...'行嗎?這不是它的工作原理...... – deceze