乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python中被忽略的else

       LibraryPKU 2018-05-02

      else, 我們再熟悉不過了。對于一個python程序員來說,else往往都是配合if來使用的,像這樣:

      1. a = '12'

      2. if a == '123':

      3.    print(a)

      4. else:

      5.    print('出錯了!')

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

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

      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!')

      本例當中,循環(huán)最后找到了'banana',輸出'Founded!',并且跳出循環(huán),所以else字句并沒有被執(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!')

      運行代碼就會直接拋出錯誤!如果不使用else字句來完成上述功能,可能我們就需要設置控制標志了,像這樣:

      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語句。

      while 和 for相類似,簡單舉個例子:

      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)的錯誤,而且很明顯,只有 try 塊不拋出異常,才會執(zhí)行aftercall()。

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

      for:

        僅當 for 循環(huán)運行完畢時(即 for 循環(huán)沒有被 break 語句中止)才運行 else 塊。

      while:

        僅當 while 循環(huán)因為條件為假值而退出時(即 while 循環(huán)沒有被break 語句中止)才運行 else 塊。

      try:

        僅當 try 塊中沒有異常拋出時才運行 else 塊。

      即,如果異?;蛘?return、break 或 continue 語句導致控制權跳到了復合語句的主塊之外,那么else 子句也會被跳過。

      for/else、while/else 和 try/else 的語義關系緊密,不過與if/else 差別很大。主要是else 這個單詞的意思阻礙了我們對這些特性的理解。 按正常的理解應該是“要么運行這個循環(huán),要么做那件事”??墒牵谘h(huán)中,else 的語義恰好相反:“運行這個循環(huán),然后做那件事?!辈贿^,相信多使用幾次,你會熟悉的。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多