if __name__ == '__main__'

在python的代碼中經(jīng)常會(huì)看到這樣的情況:

def f():
  print 'hello world!'
def main():
  f()
if __name__ == '__main__':
  main()

一開始編程的時(shí)候覺得特別別扭酗钞,我為什么不可以直接寫成:

def f():
  print 'hello world!'
f()

所以我就去查第一種寫法的好處了沉桌。幸虧有我這種困惑的人還蠻多的,很快就查到了有關(guān)資料算吩。

Python 下劃線和有關(guān)規(guī)范

首先得明白為啥有__init__,__name__,__main__這種變量存在留凭。隨便一查,就看到了<Python 下劃線和有關(guān)規(guī)范>這篇文章偎巢。之前以為前后兩個(gè)下劃線是配套使用的蔼夜,其實(shí)并不完全是。

  • 前單下劃線:弱“內(nèi)部使用”標(biāo)識(shí)压昼,如:”from M import *”求冷,將不導(dǎo)入所有以下劃線開頭的對(duì)象,包括包窍霞、模塊匠题、成員
  • 后單下劃線:只是為了避免與python關(guān)鍵字的命名沖突
  • 前雙下劃線:模塊內(nèi)的成員,表示私有成員但金,外部無法直接調(diào)用
  • 前后雙下劃線:指那些包含在用戶無法控制的命名空間中的“魔術(shù)”對(duì)象或?qū)傩跃律剑珙惓蓡T的 __name____doc____init__钱磅、__import__梦裂、__file__等。推薦永遠(yuǎn)不要將這樣的命名方式應(yīng)用于自己的變量或函數(shù)盖淡。

也就是說除了前后雙下劃線以外年柠,其它的只是一種命名規(guī)則,如果你在變量名前面加單下劃線/雙下劃線褪迟,就一定程度地變成"局部變量"冗恨,當(dāng)別人調(diào)用你的整塊代碼時(shí),不容易被發(fā)現(xiàn)這個(gè)變量味赃。例如說我有一個(gè)數(shù)單詞的代碼count.py掀抹,里面除了函數(shù)num可以返回某個(gè)單詞的字?jǐn)?shù)外,還有一個(gè)函數(shù)search用來查找單詞洁桌,但是如果我用了上面的規(guī)則來定義這個(gè)查找單詞的函數(shù)返回的變量,別人import count.py后可以使用count.num侯嘀,但不能簡(jiǎn)單地調(diào)用count.search另凌。

條件句if __name__ == '__main__'

根據(jù)<淺析python 中__name__ == '__main__'的作用>中提到的

“Make a script both importable and executable”
意思就是說讓你寫的腳本模塊既可以導(dǎo)入到別的模塊中用,另外該模塊自己也可執(zhí)行戒幔。

整篇博客看下來吠谢,再查找python的document,可以簡(jiǎn)單地解釋如下:
__name__是python一個(gè)內(nèi)置變量诗茎,用來表示調(diào)用方式工坊。當(dāng)直接運(yùn)行count.py時(shí),調(diào)用方式就是__main__敢订,也就是count.py作為腳本王污,這時(shí)if __name__ == '__main__'的值當(dāng)然為真。當(dāng)count.py作為模塊在別的代碼楚午,比如在import_count.py中調(diào)用時(shí)昭齐,那時(shí)的__name__的值是是import_count.py'__main__',也就是import_count矾柜,那么條件句不成立阱驾,下面的代碼就不會(huì)被執(zhí)行。
在被其他代碼調(diào)用的時(shí)候條件句不會(huì)被執(zhí)行怪蔑,那么我們就可以在下面亂來了里覆。例如寫測(cè)試代碼:

# match_ends.py
# Given a list of strings, return the count of the number of
# strings where the string length is 2 or more and the first
# and last chars of the string are the same.
def match_ends(words): 
  count = 0  
  for word in words:
    if len(word) >= 2 and word[0] == word[-1]: 
       count = count + 1  
       return count 
def test(got, expected):
  if got == expexted: prefix = 'OK'
  else: prefix = 'X'
  print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected))
def main():
  print 'match_ends'
  test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3)
if __name__ == '__main__':
  main()

這樣的話,我在運(yùn)行match_ends.py時(shí)缆瓣,就可以測(cè)試代碼是對(duì)是錯(cuò)喧枷,在調(diào)用match_ends.py時(shí),就不會(huì)顯示

>>>match_ends
   OK  got: 3 expected: 3

這種測(cè)試的直觀結(jié)果了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末割去,一起剝皮案震驚了整個(gè)濱河市窟却,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呻逆,老刑警劉巖夸赫,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咖城,居然都是意外死亡茬腿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宜雀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來切平,“玉大人,你說我怎么就攤上這事辐董°财罚” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵简烘,是天一觀的道長(zhǎng)苔严。 經(jīng)常有香客問我,道長(zhǎng)孤澎,這世上最難降的妖魔是什么届氢? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮覆旭,結(jié)果婚禮上退子,老公的妹妹穿的比我還像新娘。我一直安慰自己型将,他們只是感情好寂祥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著七兜,像睡著了一般壤靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惊搏,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天贮乳,我揣著相機(jī)與錄音,去河邊找鬼恬惯。 笑死向拆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酪耳。 我是一名探鬼主播浓恳,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼刹缝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了颈将?” 一聲冷哼從身側(cè)響起梢夯,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晴圾,沒想到半個(gè)月后颂砸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡死姚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年人乓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片都毒。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色罚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出账劲,到底是詐尸還是另有隱情戳护,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布瀑焦,位于F島的核電站腌且,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝠猬。R本人自食惡果不足惜切蟋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一统捶、第九天 我趴在偏房一處隱蔽的房頂上張望榆芦。 院中可真熱鬧,春花似錦喘鸟、人聲如沸匆绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崎淳。三九已至,卻和暖如春愕把,著一層夾襖步出監(jiān)牢的瞬間拣凹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工恨豁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚣镜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓橘蜜,卻偏偏與公主長(zhǎng)得像菊匿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容