- 當前.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