python主函数入口_Python 入口函数(菜鸟入门)
Python 入口函數(菜鳥入門)
最近在組內研究專項項目,其中的一個現有工具是用 Python 開發的,我的目標是對這款工具的流程進行優化。雖然可以找到對應的開發者了解現有流程,然后結合我的研究提出優化方案,最后讓 TA 去編碼實現。但是程序員心理使然,什么東西都想自己琢磨明白,于是開啟了摸索歷程。
上網搜索資料,下載了 PyCharm 開發工具,進行了一些環境配置,于是乎就開工了。由于之前沒有接觸過 Python 語言,打開代碼文件夾就蒙圈了,只見一大堆 .py 文件,不知道從哪里入手。本人 C# 出生,寫過少許 C/C++,所以一直想著有個類似 Main() 函數的東西是整個程序的入口。然而,查遍了整個目錄,沒有找到任何線索,接下來就開始各種搗鼓。
需要說明的是,本文僅是一只 Python 菜鳥的學習筆記,并不一定正確或完整,歡迎大家斧正。
每每接觸新工具或新語言,都有一種莫名的欣喜,樂于用舊知識來推敲,故而載之。
順序執行
在 Python 世界中,每一個 .py 文件就是一個模塊,在控制臺中輸入文件名即可調用該模塊。
模塊有些類似于 批處理文件(.bat) ,其中的語句是按順序執行的。
這點和我最初的想象不一致,總想著它和 C# 等語言一樣,文件中應該由 class 來組織,實則不然。
首先,在 D盤 根目錄創建一個名 Test1.py 的文件,內容如下:
print("Test1 First")
print("Test1 Second")
然后,轉到控制臺,將目錄切換到 D盤 ,啟動 Test1.py 模塊,結果如下:
D:\>python Test1.py
Test1 First
Test1 Second
嗯,不錯,完全符合預期,再試一下模塊間調用。
在 D盤 中創建 Test2.py 文件,在其中調用 Test1.py 模塊:
import Test1
print("Test2 First")
print("Test2 Second")
在控制臺中啟動 Test2.py ,輸出結果:
D:\>python Test2.py
Test1 First
Test1 Second
Test2 First
Test2 Second
可以理解的是,在 Test2.py 文件中, import Test1 語句在前面,所以在導入 Test1 模塊時便執行了其中的語句,因此 Test1 中的輸出在前面。
如果將 import Test1 放在后面, Test1 的輸出也會出現在后面:
print("Test2 First")
print("Test2 Second")
import Test1
D:\>python Test2.py
Test2 First
Test2 Second
Test1 First
Test1 Second
函數定義
模塊中的代碼能否更加靈活?除了按順序執行,還可以根據需要調用,就像 C# 語言中的函那樣。
上文中的 Print 應該就是一個內建函數,查資料,找到 Pyhton 中函數的定義:
def 函數名(參數列表):
函數體
趕緊試一下,在 Test1.py 中定義一個 SayHello 函數:
print("Test1 First")
print("Test1 Second")
def SayHello():
print("Hello World")
SayHello()
print("Test1 Third")
輸出結果:
D:\>python Test1.py
Test1 First
Test1 Second
Hello World
Test1 Third
嗯,符合預期,沒毛病,按順序執行。
如果只是定義 SayHello() 函數,而沒有調用的話,是不會有 Hello World 一行輸出的。
接下來,嘗試一下模塊間函數的調用,修改 Test2.py 文件:
import Test1
print("Test2 First")
print("Test2 Second")
Test1.SayHello()
輸出如下:
D:\>python Test2.py
Test1 First
Test1 Second
Hello World
Test1 Third
Test2 First
Test2 Second
Hello World
哈哈,對的,對的,最后一行的 Hello World 即是 Test2.py 中的 Test1.SayHello() 語句輸出的。
至于前面第三行的 Hello World 嘛,那是 import Test1 時由 Test1 模塊輸出的。
__main__
了解了函數的定義及模塊間的調用,隨之而來的疑惑是,程序\模塊 的入口在哪里。
搜索了一下資料,找到了 __name__ 屬性。先來測試一段代碼,修改 Test1.py 文件:
def SayHello():
print("Hello World")
def SayBye():
print("Bye World")
SayHello()
if(__name__=="__main__"):
print("Main")
SayBye()
在控制臺中直接啟動 Test1.py :
D:\>python Test1.py
Hello World
Main
Bye World
嗯,還好理解,按順序執行的,且滿足了 if(__name__=="__main__") 條件,所以輸出了 Main 。
且慢,換一種方式,通過 Test2.py 間接調用 Test1.py 試試,先修改 Test2.py 文件:
import Test1
print("Test2 First")
print("Test2 Second")
然后啟動 Test2.py 文件來看看結果:
D:\>python Test2.py
Hello World
Bye World
Test2 First
Test2 Second
納尼,怎么沒有輸出 Mani 呢?嗯,有點意思,找到 菜鳥教程 的解釋:
每個模塊都有一個 `__name__` 屬性,當其值是 `__main__` 時,表明該模塊自身在運行,否則是被引入
這個 __name__ 屬性還好理解,模塊的保留字段(屬性),但是怎么理解這個 __main__ 呢?
這里的 __main__ 可能可以理解為程序的入口函數,模塊直接被入口函數調用,則其 __name__ 屬性值為 __main__,否則為 模塊文件名:
def SayHello():
print("Hello World")
def SayBye():
print("Bye World")
SayHello()
if(__name__=="__main__"):
print("Main")
else:
print(__name__)
SayBye()
D:\>python Test2.py
Hello World
Test1
Bye World
Test2 First
Test2 Second
總結
本文講了 Python 模塊的一些基本特性,涉及到的知識非常粗淺,僅為記錄個人的學習過程。
每每接觸新工具或新語言,都有一種莫名的欣喜,樂于用舊知識來推敲,故而載之。
最后,引用 菜鳥教程 關于 模塊 的一些重要解釋:
模塊除了方法定義,還可以包括可執行的代碼。這些代碼一般用來初始化這個模塊。
一個模塊只會被導入一次,不管你執行了多少次import。這樣可以防止導入模塊被一遍又一遍地執行。
模塊是可以導入其他模塊的。在一個模塊的最前面使用 import 來導入一個模塊,當然這只是一個慣例,而不是強制的。
總結
以上是生活随笔為你收集整理的python主函数入口_Python 入口函数(菜鸟入门)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python申明文件编码_Python源
- 下一篇: python自动化测试面试题代码_Pyt