是的,你必須輸入一切你需要在每個模塊中。如果在module_a
中使用module_b
中定義的函數B
,則必須在module_a
之內導入module_b
,或至少從module_b
導入B
函數。
說明:
在Python模塊中是對象!當您導入執行的代碼模塊,並且被定義一切有連接到模塊對象的__dict__
:
$ echo 'a=1' > testing.py
$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import testing
>>> 'a' in testing.__dict__
True
該模塊的__dict__
還包含了常用的全球內置插件。 在模塊中定義的任何東西都使用該模塊的__dict__
作爲全局範圍。 在python中沒有像「全局變量」這樣的意思,意思是從每個模塊/類/函數都可以訪問的變量。全局變量實際上只是一個模塊的即時變量。
如果你想導入一個模塊的一些項目到其它模塊的名字空間,你可以使用from
語法:
from module_a import functionA, functionB, classA, CONSTANT
您可以使用*
進口的一切:
from module_a import *
但要避免使用from ... import *
語法!你會得到像C包含的命名空間衝突。只有在模塊在其文檔中聲明它是*
-進口安全時才這樣做。 製作模塊*
-import safe您可以定義全局的__all__
,它應該是一串字符串,表示執行*
-import時應該導出的標識符。
例如:
#module_a
A = 1
B = 2
__all__ = ['A']
#module_b
from module_a import *
print(A) #okay
print(B) #NameError, B was not exported!
是的,** **但是如果你設計你的項目正常,你不應該需要。做到這一點,以便類/文件不依賴於彼此縱橫交錯,而是以有組織的樹狀方式。你可以把'dosomething'放在'史詩'中。在這個例子中,你可以從'file1'中刪除'import otherepic'。 – Junuxx
每個模塊都有其名稱空間。除非你導入外部符號,否則它不會知道它們。請參見[Python名稱空間解釋](http://stackoverflow.com/questions/4950402/explanation-of-python-namespaces)。 –
這是一個簡短的例子,但是,我想要在單獨的文件中使用命令,而不是將命令與程序中的代碼混合使用。我使用靜態屬性作爲全局數據庫的程序中的類。我有一個應該修改職位並需要訪問該職位的命令。 – Andreas