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

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

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

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

語(yǔ)法解析

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

不加它會(huì)有什么問題?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. 初始化操作無(wú)法控制

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

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

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

最佳實(shí)踐

def function1():
    pass

def function2():
    pass

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

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

總結(jié)

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

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

加上它可以確保:

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

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

解釋:

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

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

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

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

不加它的問題:

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

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

示例:

假設(shè)我們有一個(gè)模塊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:在另一個(gè)模塊中導(dǎo)入mymodule

import mymodule

輸出:

This is a top-level print statement

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

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

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

相關(guān)文章

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

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

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

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

    在 Python 中,將字符串拼接成字節(jié)有多種方式,主要取決于字符串的編碼和具體需求,這些方法涵蓋了從基本字符串拼接到底層字節(jié)處理的多種場(chǎng)景,本文通過代碼給大家介紹的非常詳細(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'的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解

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

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

    簡(jiǎn)單了解python字符串前面加r,u的含義

    這篇文章主要介紹了簡(jiǎn)單了解python字符串前面加r,u的含義,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    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)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Python?PySpark案例實(shí)戰(zhàn)教程

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

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

    videocapture庫(kù)制作python視頻高速傳輸程序

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

最新評(píng)論

原阳县| 自贡市| 宜兰市| 鄂托克旗| 鸡西市| 郑州市| 东乡族自治县| 阳曲县| 富源县| 宿州市| 林周县| 姜堰市| 庆元县| 南宁市| 海淀区| 鞍山市| 阳原县| 汾西县| 崇明县| 阳高县| 康保县| 屏山县| 麻栗坡县| 开平市| 增城市| 曲阳县| 淮阳县| 东台市| 中山市| 金川县| 兴和县| 沅江市| 融水| 海宁市| 崇仁县| 丹巴县| 铜川市| 大兴区| 五家渠市| 嘉鱼县| 太康县|