日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

if condition 大于_if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...

發(fā)布時(shí)間:2024/10/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 if condition 大于_if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
def

這種形式的代碼,相信你已經(jīng)見過很多,在腳本的末尾,出現(xiàn)一個(gè)if條件判斷,這個(gè)if條件判斷的作用是什么呢, __name__ 事先并沒有定義,為什么可以直接使用呢,它從哪里來? 回答這些問題,必須先了解模塊屬性

1、模塊屬性

一個(gè)python腳本(以.py 結(jié)尾的文件)就是一個(gè)模塊,模塊自身有若干屬性,其中比較常用的是如下兩個(gè)
1. __name__ 模塊的名稱
2. __file__ 腳本的完整文件路徑

在任意一個(gè)python腳本里,你都可以輸出這兩個(gè)屬性

print(__name__) print(__file__)

得到結(jié)果

__main__ /Users/zhangdongsheng/experiment/test/test.py

__name__ 的值是 __main__ ,這表示模塊的名稱是__main__
__file__ 是文件的完整路徑

雖然弄清楚了__name__ 是怎么一回事,但也帶來了新的疑問,明明__name__ 就等于 __main__ ,為何還要做if條件判斷呢?顯然是存在 __name__ 不等于__main__ 的情況。

2、直接執(zhí)行與其他模塊引入

簡單的功能,我們可以在一個(gè)python腳本里完成,但復(fù)雜的功能,我們會(huì)寫多個(gè)python 腳本,比如下面的例子里,有兩個(gè)腳本,一個(gè)是main.py ,做為整個(gè)程序的啟動(dòng)腳本,utils.py 提供一些輔助函數(shù),供main.py使用

(1)utils.py

def

(2)main.py

from

接下來,通過兩步實(shí)驗(yàn),來理解 __name__ 在不同場景下的取值情況。

第一步,先來執(zhí)行utils.py文件

python utils.py

執(zhí)行結(jié)果為

utils 模塊里的__name__ 值為: __main__

第二步,執(zhí)行main.py

python main.py

執(zhí)行結(jié)果為

utils 模塊里的__name__ 值為: utils 輸入兩個(gè)整數(shù),中間用空格分開:5 2 2.5

這里有一個(gè)現(xiàn)象,你必須理解其背后的原因,我們明明執(zhí)行的main.py腳本,但是utils.py腳本里的代碼也被執(zhí)行了,這是因?yàn)樵趍ain.py腳本里引入了utils.py 這個(gè)模塊,被引入的腳本里的代碼會(huì)在引入時(shí)執(zhí)行。

當(dāng)utils.py 被其他腳本引入時(shí),它的__name__ 就不等于__main__, 而是等于utils,恰好是文件名稱去掉.py 剩余的部分。

經(jīng)過上面的實(shí)驗(yàn),我們可以得出兩個(gè)結(jié)論
1. 當(dāng)腳本被直接執(zhí)行時(shí),模塊屬性__name__ 等于__main__
2. 當(dāng)腳本被其他模塊引入時(shí),模塊屬性__name__ 等于腳本名稱去掉.py 后剩余的部分

3、終極目的---測試模塊里函數(shù)

由于一個(gè)腳本被引入時(shí),自身的代碼會(huì)被執(zhí)行,因此我們?cè)诿總€(gè)腳本里都寫上一段if __name__ == '__main__': 如果你希望一些代碼只有在腳本被直接執(zhí)行時(shí)才執(zhí)行,那么就把這些代碼放入到if 語句塊中,最常見的情形就是測試代碼,下面我對(duì)utils.py 進(jìn)行修改

def

我們寫完一個(gè)函數(shù)后,不免要寫一些測試的代碼,而這些測試的代碼我們不希望他們?cè)趗tils.py被引入時(shí)執(zhí)行,只有當(dāng)我們主動(dòng)執(zhí)行utils.py 進(jìn)行測試才執(zhí)行這些測試代碼

掃一掃,更多專業(yè)python技術(shù)分享

總結(jié)

以上是生活随笔為你收集整理的if condition 大于_if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。