![](/img/trans.png)
[英]Why is there so many Pythons installed in /usr/bin for my Snow Leopard? What decides which one is the System Python?
[英]What decides which python class' main() is run
我正在嘗試制作一個在專用監視器上顯示參數化數據的工具。
按照我在Java中學到的東西,我將命名包含“調用”代碼main()
的方法命名。 然后,我在文件末尾將此main()
調用。 問題是由於某種原因,當我在命令提示符下運行python file1
時,它從file2運行了main。 File1導入文件2,但是由於通過不from file2 import*
寫入避免了main()
的命名空間沖突,因此我不確定它是否正在運行另一個文件的main()
。
我正在運行Windows 7 Ultimate,python 3.4
考慮使用__name__
變量來指定要運行的main()
。
例如,請查看: __name__ ==“ __main__”怎么辦?
main
只是指向函數對象的Python變量。 如果給main
電源分配一個不同的值,則您將失去對原始功能的引用。 如果您在導入后定義了main
,則將使用您自己的main
。
更新:如果file1.py
和file2.py
都包含main()
函數的定義,並且如果兩者都在文件中調用了它,則將其作為自己文件的最后一行,如果file1.py
確實import file2
了file1.py
-但是在file1.py
的main()
定義之后不會from file2 import *
然后將調用這兩個main()
函數。 在import file2
期間將調用file2.main()
(僅在應用程序中是第一次導入),並且在file1.main()
的main()
調用時將調用file1.py
main()
。
每當將xxx.py
作為腳本啟動時,都會按照源文本的順序對其進行處理。 定義的處理意味着對定義進行編譯,在第一次讀取過程中發現命令時,將執行該命令(實際上是先編譯為xxx.pyc
之后)。
避免在文件中執行代碼的唯一方法是使用if
條件合適的代碼來跳過代碼片段。 這就是為什么模式
if __name__ == '__main__':
main()
在來源中使用。 (實際上是代碼的執行-僅跳過if
的分支。)讀取...如果文件作為腳本啟動,則__name__
變量采用字符串值'__main__'
,條件成立並調用該文件中的main()
。
如果在file2.py
使用了相同的模式,並且該文件用作模塊(即import file2
),則__name__
變量包含導入模塊的名稱(此處為file2
),並且該條件不成立。 因此,不會調用file2.py
內部的main()
。
即使在預期僅用作模塊的文件中也經常使用該模式。 該代碼通常用於測試模塊的基本功能。 考慮模塊的作者進行一些更改時的情況。 然后,他/她將其作為腳本啟動(通常並不困難),然后主體開始對該模塊進行測試並報告結果-例如使用unittest
模塊或進行任何類型的測試。 因此,例如, file2.main()
將是激活單元測試的好地方。
嘗試將以下內容添加到file1.py
:
print(__name__)
print(file2.__name__)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.