最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中if?__name__?==?“__main__“的作用總結(jié)

 更新時間:2025年11月24日 09:44:54   作者:Redmi人兒  
這篇文章主要介紹了Python中if?__name__?==?“__main__“作用的相關(guān)資料,if?__name__?==?'__main__'是Python中控制腳本執(zhí)行方式的關(guān)鍵語句,通過判斷`__name__`的值區(qū)分直接運(yùn)行和模塊導(dǎo)入,需要的朋友可以參考下

這行代碼在Python中非常常見,它的作用是:判斷當(dāng)前模塊是否被直接運(yùn)行,而不是被導(dǎo)入到其他模塊中

語法解析

if __name__ == "__main__":
    # 這里的代碼只在直接運(yùn)行該文件時執(zhí)行
    main()
  • __name__ 是Python的一個內(nèi)置變量
  • 當(dāng)文件被直接運(yùn)行時,__name__ 的值為 "__main__"
  • 當(dāng)文件被導(dǎo)入時,__name__ 的值為模塊名(文件名)

不加它會有什么問題?

1. 模塊被導(dǎo)入時執(zhí)行不必要的代碼

沒有使用 if __name__ == "__main__": 的情況:

# module.py
def useful_function():
    print("這是一個有用的函數(shù)")

print("模塊被加載了!")  # 這行在導(dǎo)入時就會執(zhí)行
useful_function()       # 這也會在導(dǎo)入時執(zhí)行

# 另一個文件:main.py
import module  # 導(dǎo)入時就會立即打印"模塊被加載了!"并執(zhí)行函數(shù)

使用 if __name__ == "__main__": 的情況:

# module.py
def useful_function():
    print("這是一個有用的函數(shù)")

if __name__ == "__main__":
    print("模塊被直接運(yùn)行!")
    useful_function()

# main.py
import module  # 不會執(zhí)行任何打印,除非顯式調(diào)用 module.useful_function()

2. 測試代碼會被意外執(zhí)行

# 沒有保護(hù)的情況
def add(a, b):
    return a + b

# 測試代碼
result = add(2, 3)  # 導(dǎo)入時就會執(zhí)行測試!
print(f"測試結(jié)果: {result}")

# 有保護(hù)的情況
def add(a, b):
    return a + b

if __name__ == "__main__":
    # 測試代碼只在直接運(yùn)行時執(zhí)行
    result = add(2, 3)
    print(f"測試結(jié)果: {result}")

3. 初始化操作無法控制

# 不好的寫法
print("程序啟動中...")
initialize_database()  # 導(dǎo)入時就會初始化數(shù)據(jù)庫!
start_web_server()

# 好的寫法
def main():
    print("程序啟動中...")
    initialize_database()
    start_web_server()

if __name__ == "__main__":
    main()  # 只有直接運(yùn)行時才啟動程序

最佳實(shí)踐

def function1():
    pass

def function2():
    pass

def main():
    """主函數(shù),包含程序的主要邏輯"""
    function1()
    function2()

if __name__ == "__main__":
    # 這里可以添加命令行參數(shù)解析、異常處理等
    main()

總結(jié)

不加 if __name__ == "__main__": 的主要問題是:

  • 模塊被導(dǎo)入時會執(zhí)行測試代碼和初始化代碼
  • 代碼的可重用性降低
  • 可能出現(xiàn)意外的副作用

加上它可以確保:

  • 模塊既可以作為腳本直接運(yùn)行
  • 也可以被其他模塊安全導(dǎo)入
  • 提高了代碼的模塊化和可重用性

在Python中,if __name__ == "__main__": 這行代碼用于檢查當(dāng)前模塊是否被直接運(yùn)行,而不是被導(dǎo)入到其他模塊中。

解釋:

每個Python模塊(一個.py文件)都有一個內(nèi)置的變量__name__

當(dāng)模塊被直接執(zhí)行時,__name__的值被設(shè)置為"__main__"

當(dāng)模塊被導(dǎo)入到其他模塊時,__name__的值則是模塊的名字(即文件名,不帶.py后綴)。

因此,這行代碼下面的代碼塊只會在該模塊被直接運(yùn)行時執(zhí)行,而當(dāng)該模塊被導(dǎo)入時不會執(zhí)行。

不加它的問題:

如果這個模塊既可以被其他模塊導(dǎo)入使用,也可以直接運(yùn)行,那么沒有這個條件判斷,當(dāng)被導(dǎo)入時,那些不希望被執(zhí)行的代碼(例如測試代碼、主程序等)也會被執(zhí)行,這可能導(dǎo)致意想不到的行為。

通常,我們將模塊的主要功能封裝成函數(shù)或類,然后在if name == “main”:下面調(diào)用這些函數(shù)或類來運(yùn)行程序。這樣,當(dāng)模塊被導(dǎo)入時,這些調(diào)用不會執(zhí)行,而模塊中的函數(shù)和類可以被其他模塊使用。

示例:

假設(shè)我們有一個模塊mymodule.py,內(nèi)容如下:

def my_function():
    print("Hello from my_function!")

print("This is a top-level print statement")

if __name__ == "__main__":
    print("This code runs only when the module is executed directly")
    my_function()

情況1:直接運(yùn)行mymodule.py

輸出:

This is a top-level print statement
This code runs only when the module is executed directly
Hello from my_function!

情況2:在另一個模塊中導(dǎo)入mymodule

import mymodule

輸出:

This is a top-level print statement

可以看到,不加條件判斷的print語句在導(dǎo)入時也會執(zhí)行,而條件判斷內(nèi)的代碼只在直接運(yùn)行時執(zhí)行。

因此,使用if __name__ == "__main__":可以讓我們寫出既可以被導(dǎo)入又可以直接運(yùn)行的模塊,并且不會在導(dǎo)入時執(zhí)行不必要的代碼。

到此這篇關(guān)于Python中if __name__ == “__main__“作用總結(jié)的文章就介紹到這了,更多相關(guān)Python中if __name__ == “__main__“內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django注冊用郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn)

    django注冊用郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn)

    這篇文章主要介紹了django注冊用郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 將Python字符串拼接成字節(jié)的多種方式

    將Python字符串拼接成字節(jié)的多種方式

    在 Python 中,將字符串拼接成字節(jié)有多種方式,主要取決于字符串的編碼和具體需求,這些方法涵蓋了從基本字符串拼接到底層字節(jié)處理的多種場景,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • python property的使用技巧分享

    python property的使用技巧分享

    這篇文章主要介紹了python property的使用技巧分享,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • python列表的切片與復(fù)制示例分析

    python列表的切片與復(fù)制示例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python列表的切片與復(fù)制示例分析及相關(guān)代碼,有興趣點(diǎn)朋友們可以參考下。
    2021-10-10
  • 解決CentOS下ImportError: No module named '_sqlite3'的問題

    解決CentOS下ImportError: No module named &a

    這篇文章主要介紹了解決CentOS下ImportError: No module named '_sqlite3'的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解

    PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解

    今天小編就為大家分享一篇PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 簡單了解python字符串前面加r,u的含義

    簡單了解python字符串前面加r,u的含義

    這篇文章主要介紹了簡單了解python字符串前面加r,u的含義,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Scrapy框架爬取西刺代理網(wǎng)免費(fèi)高匿代理的實(shí)現(xiàn)代碼

    Scrapy框架爬取西刺代理網(wǎng)免費(fèi)高匿代理的實(shí)現(xiàn)代碼

    今天小編就為大家分享一篇關(guān)于Scrapy框架爬取西刺代理網(wǎng)免費(fèi)高匿代理的實(shí)現(xiàn)代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python?PySpark案例實(shí)戰(zhàn)教程

    Python?PySpark案例實(shí)戰(zhàn)教程

    PySpark是由Spark官方開發(fā)的Python語言第三方庫,Python開發(fā)者可以使用pip程序快速的安裝PySpark并像其它三方庫那樣直接使用,本文給大家介紹Python?PySpark案例實(shí)戰(zhàn),感興趣的朋友一起看看吧
    2023-09-09
  • videocapture庫制作python視頻高速傳輸程序

    videocapture庫制作python視頻高速傳輸程序

    python視頻高速傳輸程序,大家參考使用吧
    2013-12-12

最新評論

阳曲县| 连南| 通化县| 夏河县| 宁乡县| 兴安盟| 都安| 平凉市| 广宁县| 留坝县| 丰城市| 万全县| 毕节市| 永济市| 安义县| 称多县| 汨罗市| 岑巩县| 朝阳县| 那坡县| 鸡东县| 琼中| 新昌县| 沙田区| 张掖市| 蒙阴县| 辽源市| 呼伦贝尔市| 易门县| 图片| 民丰县| 天峻县| 南充市| 五原县| 介休市| 西藏| 宜川县| 长垣县| 桂东县| 黔西县| 全椒县|