iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Software Development

Python Flask CICD 啟動 ! 建構屬於你的自動化流程 !系列 第 5

Day5 - Python 進階概念(一) - 模塊 Module

  • 分享至 

  • xImage
  •  

前情提要:

在前一天的 Python Flask 示範當中,在程式碼的最下面有展示到 __name__ = "__main__",那今天就是要來和大家分享其中蘊含的概念和使用方式!

Python 特性:

  1. Python 當中,並不像是 Java 等等有主要的進入口(所謂的 Main 方法),所有的檔案都可以當作主要進入口。
  2. Python 當中,不僅主要進入口會從上到下被執行,連被引進的模塊都會由上到下被執行,而此概念也會牽扯到等等要提到的 __name__ = "__main__"

模塊 Module:

Python 開發時,隨著程式碼越來越多,會希望把不同應用的函示都給分類出來,方便日後的擴充和維護,因此 Python 提供了一種模式,來讓你把所定義的函式單獨放在檔案當中,而該檔案也被稱為「Module 模組」。

模塊內建變數 __name__

__name__ 為 Module 內建的變數,定義了此模塊的名稱是什麼,主要進入點的模塊名稱會是 __main__,而其餘的模塊名稱就是原本的檔案名。假如有兩個檔案分別為 original.pyfunctions.py,如果今天主要進入點為 original.py,則其模塊名稱會為 __main__,而其他的會保持原先的檔案名,也就是 functions

什麼是 __name__ = "__main__"

根據 Python 特性的第二點可以了解到,不僅主要進入口的程式碼會上到下執行,連模塊的程式碼也會,以下為程式碼說明:

# functions.py
def hello():
  print("hello")
hello()
# original.py
import functions
functions.hello()

original.py 為主要的進入口,依照最直接的邏輯其結果會為以下:

hello

但若依照上面的程式碼真實執行過會發現到其實真正的結果會是:

hello
hello

而造成其最主要的差異是因為前面所提到 Python 的特性,不僅主要進入口的程式碼會由上到下被執行,連模塊的也會,因此在 original.py 中,不僅會讀進 def hello() 此函式,連 hello() 的使用也會被讀進去,而這也是為什麼需要 __name__ = "__main__"

使用 __name__ = "__main__"

由以上例子可知,引進的模塊一樣會由上到下被執行,但有時可能只是要測試該函式的運作才使用該函式,被引進時並不是真的需要其運行,因此我們可以改成以下的程式碼:

# functions.py
def hello():
  print("hello")
if __name__ = "__main__":
  hello()

以上代表了當 functions.py 為主要進入口時,才執行 hello() 此函式,因此就可以避免剛剛的結果,若在執行一次上面的程式碼即可得到以下結果:

hello

上一篇
Day4 - 簡單示範 Python Flask
下一篇
Day6 - Python 進階概念(二) - 裝飾器 Decorator
系列文
Python Flask CICD 啟動 ! 建構屬於你的自動化流程 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言