小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python中被忽略的else

 LibraryPKU 2018-05-02

else, 我們?cè)偈煜げ贿^(guò)了。對(duì)于一個(gè)python程序員來(lái)說(shuō),else往往都是配合if來(lái)使用的,像這樣:

  1. a = '12'

  2. if a == '123':

  3.    print(a)

  4. else:

  5.    print('出錯(cuò)了!')

但是,python中的else并不只能用在if之后,so,這次我們討論一下Python流程控制中的else。

else子句不僅能在if 語(yǔ)句中使用,還能在 for、while 和 try 語(yǔ)句中使用,這個(gè)語(yǔ)言特性不是什么秘密,但卻沒(méi)有得到重視。我們看一個(gè)例子:

  1. my_list = ['apple', 'pear', 'orange', 'banana']

  2. for item in my_list:

  3.    if item == 'banana':

  4.        print('Founded!')

  5.        break

  6. else:

  7.    raise ValueError('No banana flavor found!')

本例當(dāng)中,循環(huán)最后找到了'banana',輸出'Founded!',并且跳出循環(huán),所以else字句并沒(méi)有被執(zhí)行。但如果,將代碼修改一下,去掉列表中的'banana':

  1. my_list = ['apple', 'pear', 'orange']

  2. for item in my_list:

  3.    if item == 'banana':

  4.        print('Founded!')

  5.        break

  6. else:

  7.    raise ValueError('No banana flavor found!')

運(yùn)行代碼就會(huì)直接拋出錯(cuò)誤!如果不使用else字句來(lái)完成上述功能,可能我們就需要設(shè)置控制標(biāo)志了,像這樣:

  1. my_list = ['apple', 'pear', 'orange']

  2. flag = True

  3. for item in my_list:

  4.    if item == 'banana':

  5.        print('Founded!')

  6.        flag = False

  7.        break

  8. if flag:

  9.    raise ValueError('No banana flavor found!')

很明顯,這里使用了額外的變量flag和if語(yǔ)句。

while 和 for相類似,簡(jiǎn)單舉個(gè)例子:

  1. a = 'apple'

  2. while a == 'banana':

  3.    pass

  4. else:

  5.    raise ValueError('No banana flavor found!')

下面看一下try:

  1. try:

  2.    dangerous_call()

  3. except OSError:

  4.    log('OSError...')

  5. else:

  6.    after_call()

很明確,try 塊防守的是 dangerouscall() 可能出現(xiàn)的錯(cuò)誤,而且很明顯,只有 try 塊不拋出異常,才會(huì)執(zhí)行aftercall()。

現(xiàn)在,總結(jié)一下else 子句的行為如下:

for:

  僅當(dāng) for 循環(huán)運(yùn)行完畢時(shí)(即 for 循環(huán)沒(méi)有被 break 語(yǔ)句中止)才運(yùn)行 else 塊。

while:

  僅當(dāng) while 循環(huán)因?yàn)闂l件為假值而退出時(shí)(即 while 循環(huán)沒(méi)有被break 語(yǔ)句中止)才運(yùn)行 else 塊。

try:

  僅當(dāng) try 塊中沒(méi)有異常拋出時(shí)才運(yùn)行 else 塊。

即,如果異?;蛘?return、break 或 continue 語(yǔ)句導(dǎo)致控制權(quán)跳到了復(fù)合語(yǔ)句的主塊之外,那么else 子句也會(huì)被跳過(guò)。

for/else、while/else 和 try/else 的語(yǔ)義關(guān)系緊密,不過(guò)與if/else 差別很大。主要是else 這個(gè)單詞的意思阻礙了我們對(duì)這些特性的理解。 按正常的理解應(yīng)該是“要么運(yùn)行這個(gè)循環(huán),要么做那件事”。可是,在循環(huán)中,else 的語(yǔ)義恰好相反:“運(yùn)行這個(gè)循環(huán),然后做那件事。”不過(guò),相信多使用幾次,你會(huì)熟悉的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多