2011-05-12 102 views
3

python模塊可以檢測是否已導入import modulefrom module import *?類似於Python導入類型檢測

if __something__=='something': 
     print 'Directly imported with "import ' + __name__ + '"' 
else: 
     print 'Imported with "from ' + __name__ + ' import *"' 

謝謝。

+6

需要依靠這聽起來非常非常破碎。 – 2011-05-12 19:41:01

+0

我只是好奇=) – Emilio 2011-05-12 19:42:07

回答

4

不,不可能在模塊的代碼中檢測到它。在第一次導入時,將執行模塊主體並在sys.modules中插入新的模塊對象。只有在此之後,請求的名稱纔會插入到導入模塊的名稱空間中。

稍後導入時,模塊主體甚至沒有執行。因此,如果一個模塊被首次導入爲

import module 

和第二次作爲

from module import name 

它有沒有機會在第二導入過程中做任何事情。特別是,它不能檢查它是如何導入的。

0

雖然Svens的回答可能是正確的,而且這看起來有點明顯,但當我偶然發現這個問題時,這正是我真正想要的。

該模塊將至少知道您已將一個輸入參數傳遞給它。雖然允許對這個特定的腳本進行單元測試,而不需要在導入它的模塊中執行單元測試。

import sys 

def myfunction(blah): 
    return "something like: " + blah 

noargs=len(sys.argv) 
if noargs>1: 
    for i in range(noargs-1): 
     print myfunction(sys.argv[i+1]) 

但是,如果您沒有輸入參數,它並不能真正幫助您,Emilio。 :)