如何理解 Python 中的 if __name__ == __main__

  • 當前.py文件被直接運行時:
    if __name__ == '__main__'之下的代碼塊會被運行;
  • 當前.py文件以模塊形式被其他.py文件導入並運行那個.py 文件時:
    if __name__ == '__main__'之下的代碼塊不會被運行

示例

有兩個 py 文件,其中 action.py 文件調用了 human.py 文件

action.py

from human import walk 
# 調用了 human 文件,會導入 walk 函數和所有執行語句
# 在運行當前文件時是這行會替換成所有導入的內容

print("action.py: ", end="")
walk()

運行 action.py,輸出結果如下

human.py: I'm saying now.
action.py: I'm walking now.

human.py
運行 action.py 時,所有 ## 的語句會去替換 from human import walk

def say():
    print("I'm saying now.")


def walk(): ##
    print("I'm walking now.") ##


if __name__ == '__main__':
    print("human.py: ", end="")
    walk()

print("human.py: ", end="") ##
say() ##

說明:

  • from human import walk 調用了 human 文件,會導入 walk 函數和所有不在if main下的執行語句,在運行當前文件時是這行會替換成所有導入的內容
  • 因此建議以後在寫 Python 程序是所的有執行語句放在 if __name__ == '__main__' 下面

更多示例

在這裏插入圖片描述
car.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

"""一個可用於表示汽車的類,該模塊被my_car.py調用"""
# 如果直接運行這個模塊,輸出__main__
# 如果這個模塊被調用,則在調用程序中會輸出car(該模塊名)
print(__name__)

# 直接運行該模塊會輸出Hello,被別的文件調用時不會輸出Hello
if __name__ == '__main__':
    print("Hello")  
    
print("World!")  # 被別的文件調用時會先輸出World


class Car():
	--snip--

abs.py

如果別的程序想調用 abs.py的幾個函數,那if __name下的代碼就不會被運行,這從邏輯上講也很正確

"""Absolute Value."""


def abs_val(num):
    """
    Find the absolute value of a number.

    >>> abs_val(-5.1)
    5.1
    >>> abs_val(-5) == abs_val(5)
    True
    >>> abs_val(0)
    0
    """
    return -num if num < 0 else num


def test_abs_val():
    """
    >>> test_abs_val()
    """
    assert 0 == abs_val(0)
    assert 34 == abs_val(34)
    assert 100000000000 == abs_val(-100000000000)


if __name__ == "__main__":
    print(abs_val(-34))  # --> 34

參考博客:如何簡單地理解Python中的`if name == ‘main

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章