2011-01-21 60 views
1

我有以下模式:使用變量導入

databasename = "mydatabase" 
import databasefunctions 

和databasefunctions我有以下方法。

def checkStatusOfDatabase(database=databasename): 

然而,我得到一個錯誤說:「數據庫名稱」未在規定checkStatusOfDatabase行定義的名稱:NameError。

我當然可以在databasefunctions模塊中移動數據庫名稱的定義,但這在我的設計中不適用。我還能如何實現:在主模塊中定義的數據庫名稱被用作任何導入模塊的默認值。

+0

出於好奇,你爲什麼無法做databasefunctions模塊中的定義? – aodj 2011-01-21 11:25:53

+0

不是一個確切的重複,但這應該在一定程度上回答您的問題: http://stackoverflow.com/questions/67631/how-to-import-module-from-file-name – viraptor 2011-01-21 11:28:29

+0

我想擁有所有在我的主模塊開頭的正確參數值(因爲我修改了很多),而不是隱藏在不同的導入模塊中。 – David 2011-01-21 11:29:28

回答

4

你不能(也不應該)這樣做;這樣做會導致無法在沒有主模塊的情況下導入databasefunctions。然而,可以實現這樣的默認:

# databasefunctions 
DEFAULT_NAME = "" 
def checkStatusOfDatabase(database=DEFAULT_NAME): 

# main 
import databasefunctions 
databasefunctions.DEFAULT_NAME = "mydatabase" 
0

可以使用__builtin__模塊

import __builtin__ 
__builtin__.foo = 'bar' 

那麼這將是從所有其它模塊訪問,當你做一個類似的訪問方法。你可以使用這個,並做到這一點:

import __builtin__ 
dbName = __builtin__.get('foo', 'ham') # dictionary access with default return 
def checkStatusOfDatabase(database=dbName): 
    ...