簡體   English   中英

什么決定運行哪個python類的main()

[英]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.pyfile2.py都包含main()函數的定義,並且如果兩者都在文件中調用了它,則將其作為自己文件的最后一行,如果file1.py確實import file2file1.py -但是在file1.pymain()定義之后不會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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM