目錄
常見誤解
有什麼用
程式運行入口
程式碼規範
多進程場景大作用
首頁 後端開發 Python教學 寫 Python 腳本,一定要加這個!

寫 Python 腳本,一定要加這個!

Apr 14, 2023 pm 07:40 PM
python 函數 腳本

使用 Python 的人,平常常常會寫一些腳本,不管是為了提升工作效率,還是為了滿足一些特定的需求,Python 腳本都是一個常見又有用的東西。

但是,我最近發現了一個以前不曾察覺的問題,就是腳本裡面是否添加if __name__ == "__main__":
這個語句,對腳本的使用其實是有很大影響的,而且這裡面還有很大的學問。

常見誤解

很多朋友在寫腳本時比較隨意,簡單的腳本直接一溜寫下來,沒有函數,順序執行。複雜點的腳本,可能會加函數。這種寫法可讀性比較差,常常讓人一眼找不到程式運行的入口和順序。

而Python 社群比較推薦的寫法是在寫腳本時,加上下面這個語句:

def main():
# do something
print("do something.")

if __name__ == "__main__":
main()
登入後複製

大多數人看到這裡,會不會說,這有什麼,加不加這個沒那麼重要吧!

先不要忙著不屑,讓我們一起來仔細掰扯掰扯!

有什麼用

在具體說明if __name__ = = '__main__' 的作用前,先從一個簡單的實例直觀上感受一下。

# const.py
 
PI = 3.14
 
def train():
print("PI:", PI)
 
train()
登入後複製
# area.py
 
from const import PI
 
def calc_round_area(radius):
return PI * (radius ** 2)
 
def calculate():
print("round area: ", calc_round_area(2))
 
calculate()
登入後複製

我們看下area.py 的運行結果:

PI: 3.14
round area:12.56
登入後複製

的PI 變量,在運行的時候,const.py 中函數train()
中的打印也帶過來了,而我們只是引用變量,並沒有引用函數,所以這是我們不願意看到的。

解決這個問題的方法也很簡單,我們只要在const.py 中加上一句:

PI = 3.14

def train():
 print("PI:", PI)

if __name__ == "__main__":
 train()
登入後複製

再次執行area.py ,輸出結果如下:

round area:12.56
登入後複製

這是我們預期的結果。

程式運行入口

叢上述實例可以發現,如果沒有if __name__=="__main__": ,作為area.py 導入文件時const.py
中的所有代碼都被執行了,而加上之後就只執行導入的部分程式碼。

這就是 if __name__=="__main__": 顯而易見的作用,實際上 if __name__=="__main__": 就相當於是
Python 模擬的程式入口。由於模組之間相互引用,不同模組可能都有這樣的定義,而入口程式只能有一個,選取哪個入口程式取決於 __name__ 的值。

我們再來看一個小程式:

print("look here")
print(__name__)
 
if __name__ == '__main__':
print("I'm test.py")
登入後複製

程式的執行結果如下:

look here
__main__
I'm test.py
登入後複製

可以發現,此時變數__name__ 的值為__main__,所以印出“I'm
test.py”。如果執行其他文件,透過執行的文件呼叫本文件,則不會列印該語句,因為程式入口不對,該語句不執行。

程式碼規範

有了if __name__=="__main__": 相當於Python
程式也有了一個入口函數,我們可以清晰的知道程式的邏輯開始於何處,當然還需要我們自覺的把程式的開始邏輯都放在這裡。其實,這也是 PyCharm
推薦的做法。

為什麼很多優秀的程式語言,像是C、Java、Golang、C 都有一個main
入口函數呢?我想很重要的一個原因就是程式入口統一,容易閱讀。

多進程場景大作用

如果你用多進程來做並行計算,類似這樣的程式碼:

import multiprocessing as mp

def useful_function(x):
return x * x

print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)
登入後複製

運行這段程式碼,控制台會一直印出:

processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
登入後複製

且程式會不停的報錯RuntimeError。

如果你加上了if __name__=="__main__": ,程式就會按照預期的進行:

import multiprocessing as mp

def useful_function(x):
return x * x

if __name__ == '__main__':
print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)
登入後複製

Python 的多程式就是啟動了多個Python 解器器,每個Python 解釋器都會導入你這個腳本,複製一份全域變數和函數給子程序用,如果有了if
__name__=="__main__":,那它後面的程式碼就不會被import,也就不會重複執行。否則,這個創建多進程的程式碼就會被
import,就會被執行,從而無限遞歸的去創建子進程

##總結

if __name__==" __main__": 雖然不是強制的,但是我強列推薦你寫腳本時按照這個規範來做。

以上是寫 Python 腳本,一定要加這個!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles