精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python 為什么不設計 Do-while 循環結構?

開發 后端
在某些編程語言中,例如 C/C++、C#、PHP、Java、JavaScript 等等,do-while 是一種基本的循環結構。

在某些編程語言中,例如 C/C++、C#、PHP、Java、JavaScript 等等,do-while 是一種基本的循環結構。

它的核心語義是:先執行一遍循環體代碼,然后執行一遍條件語句,若條件語句判斷為真,則繼續執行循環體代碼,并再次執行條件語句;直到條件語句判斷為假,則跳出循環結構。

流程圖如下(Java 示例):

  1. // 打印小于 20 的數字 
  2. public class Test { 
  3.    public static void main(String[] args){ 
  4.       int x = 10; 
  5.       do { 
  6.          System.out.print("value of x : " + x ); 
  7.          x++; 
  8.          System.out.print("\n"); 
  9.       } while(x < 20); 
  10.    } 

Python 并不支持 do-while 結構,“do”并不是一個有效的關鍵字。

那么,為什么 Python 不提供這種語法結構呢,這種現狀的背后有何種設計考量因素呢?

在回答這個問題之前,讓我們再仔細思考一下 do-while 語法可以解決什么問題,看看使用這種結構能帶來什么好處?

最顯而易見的好處是:do-while 語法保證了會先執行一遍循環體代碼。

它的使用場景也許不多,但是,跟普通的 while 循環或者 for 循環語法的“條件前置”思想不同,它體現的是一種“條件后置”的編程邏輯,也是一種控制循環的常見方式。

它們的關系似乎有點像 C/C++ 這些語言中的i++與++i操作的區別,在某些特殊場合中,也許會更為高效。

除了這一特點,這種結構最大的應用場景其實是在 C/C++ 中特殊的do {...} while (0) 用法。這在很多開源項目的源碼中都能找到蹤跡,例如 Linux、Redis 以及 CPython 解釋器,等等。

這里面的數字 0 表示布爾值 False,意味著循環只會執行一遍,然后就跳出。

這樣的寫法是不是很詭異?所謂“循環”,一般就意味著程序體會被反復執行多次,但是,do {...} while (0) 卻偏偏只需要它執行一遍,這初看起來是有點多余啊。

這種寫法主要用在宏函數的定義中,可以解決宏代碼塊的編譯問題,使代碼按照我們的意圖而合理分塊。

另外,do {...} while (0) 結合 break 使用,還可以實現很優雅的跳轉控制效果。

在下面的示例中,步驟 1、4 和 5 要求必須執行,而步驟 2 取決于步驟 1 的執行結果,步驟 3 則取決于步驟 2 的執行結果。

  1. do { 
  2.   // 執行步驟 1  
  3.   if (條件1失敗) { 
  4.     break; 
  5.   } 
  6.   // 執行步驟 2  
  7.   if (條件2失敗) { 
  8.     break; 
  9.   } 
  10.   // 執行步驟 3  
  11.   if (條件3失敗) { 
  12.     break; 
  13.   } 
  14. } while(0); 
  15. // 執行步驟 4 
  16. // 執行步驟 5 

在這種場景中,我們確實只需要按照順序執行一遍。do-while 結構很清晰,避免造成多層條件嵌套或者設置諸多額外標記的局面。

最后還有一點,在匯編層面,do-while 比 while 更接近匯編語言的邏輯,可以節省使用指令,在過去的低內存時代,算得上是一種優化寫法。

分析完 do-while 的好處后,讓我們回到主題:Python 為什么不需要設計 do-while 循環語法呢?

首先,Python 離底層應用編程太遠了,就不用考慮匯編指令的優化了,同時,它也不涉及宏的使用。

至于“條件前置”和“條件后置”的區別,其實并沒有太大影響,而且,由于 Python 使用簡潔優雅的縮進加冒號語法來劃分代碼塊,導致直譯過來的 do-while 語法看起來會很怪異(注意,直譯的 while 的條件后沒有其它內容):

  1. do: 
  2.     pass 
  3. while False 

想要引入新的語法特性,必然要遵守既定的風格習慣。其它語言的 do-while 結構直譯成 Python 的話,肯定不合適。

事實上,在 2003 年時,有一個 PEP 提議給 Python 加上 do-while 語法支持:

PEP-315 Enhanced While Loop

該 PEP 提議增加一個可選的 do 子句,支持將 while 循環擴展成這樣子:

  1. do: 
  2.     <setup code> 
  3. while <condition>: 
  4.     <loop body> 

這不是簡單地從其它語言翻譯成 Python,它的 while 語句后保留了 Python 的縮進用法,并不會造成直譯形式的突兀結果。

加上 while 循環本身已支持的可選的 else 子句,因此,while 完整的語法結構是這樣的:

  1. while_stmt : ["do" ":" suite] 
  2.             "while" expression ":" suite 
  3.             ["else" ":" suite] 

(PS.在本系列的下一篇文章,我們將解釋為什么 Python 要支持 while-else 語法)

也就是說,在保持原 while 循環語法不變的情況下,PEP-315 提議支持在 while 前面使用一個可選的 do 子句。

do 子句只會執行一遍,當它里面出現 break 時,則跳出整個 do-while 循環;當 do 子句中出現 continue 時,則跳出 do 子句,進到 while 的條件判斷中。

有了 do 子句后,很容易就能實現 do {...} while (0) 的跳轉控制效果。

但是,這個 PEP 遭到了一些核心開發者的反對。

反對的理由是,不需要引入新的關鍵字和語法,僅使用現有語法就能很好地實現同樣的功能:

  1. while True
  2.     <setup code> 
  3.     if not <condition>: 
  4.         break 
  5.     <loop body> 

Python 之父 Guido van Rossum 也持反對意見,他的原話是:

Guido的回復

Please reject the PEP. More variations along these lines won't make the language more elegant or easier to learn. They'd just save a few hasty folks some typing while making others who have to read/maintain their code wonder what it means.

簡單翻譯一下,這種 do-while 語法并不會使 Python 更優雅好用,反而會產生閱讀/維護代碼的理解負擔。

就個人的感覺而言,我也不贊成引入 PEP-315 那種可選的 do-while 語法,雖然它比固定形式的 do-while 結構更為靈活和優雅一點。

最后稍微總結一下,do-while 作為一種常見的循環結構,在其它語言中有所發揮,它甚至還發展出了do {...} while (0) 的典型用法,但是,do-while 能夠解決的幾個問題要么在 Python 中并不存在(宏定義、匯編指令),要么就是已經有更為合適而低成本的實現(跳轉控制)。

看完這篇文章,你是否還有其它補充的內容呢?

作者簡介 ▽

豌豆花下貓,生于廣東畢業于武大,現為蘇漂程序員,有一些極客思維,也有一些人文情懷,有一些溫度,還有一些態度。

本文轉載自微信公眾號「Python貓」,可以通過以下二維碼關注。轉載本文請聯系Python貓公眾號。

 

責任編輯:武曉燕 來源: Python貓
相關推薦

2022-10-28 07:38:06

Javawhile循環

2024-02-26 12:13:32

C++開發編程

2021-11-19 09:49:00

CC++語法糖

2020-07-23 08:18:27

C語言執行循環體條件

2024-12-10 08:41:12

語句if卡死

2019-03-11 08:36:11

Python代碼Flask

2020-04-01 17:50:02

Python編程語言

2021-04-13 11:15:54

網絡安全C語言循環結構

2020-12-11 05:57:01

Python循環語句代碼

2021-12-09 23:20:31

Python循環語句

2024-12-19 16:00:00

Pythonwhile 循環

2021-08-13 15:09:47

JavaScriptWhile循環

2021-06-22 10:12:37

JavaScript 前端While 循環

2021-03-24 13:17:41

編程循環語句Java

2024-04-24 12:45:06

index性能數組

2023-04-20 13:59:01

Pythonwhile循環的

2023-11-06 13:04:59

Python日志庫

2010-09-08 17:00:22

SQLWHILE循環

2013-03-13 03:58:12

馬云人大代表兩會

2022-01-11 10:29:32

Docker文件掛載
點贊
收藏

51CTO技術棧公眾號

日韩欧美视频在线免费观看| 欧美性xxxxxx少妇| 欧美成人video| 国产一区二区不卡视频在线观看| 婷婷丁香综合网| 久久亚洲资源| 五月天激情综合网| 国产大片一区二区三区| 欧美欧美欧美| 亚洲激情社区| 日韩欧美国产精品一区| 久久久一二三四| 久久国产香蕉视频| 国产一区二区区别| 欧美午夜精品伦理| 久久99热只有频精品91密拍| 久久一级黄色片| 日本精品国产| 亚洲美女区一区| 成人免费淫片视频软件| 你懂得视频在线观看| 国产电影一区二区| 国产精品美女久久久久久久网站| 日本免费在线精品| 在线观看日韩精品视频| av在线中出| 高潮精品一区videoshd| 欧美国产日本高清在线 | 欧美久久视频| 91精品国产乱| 免费观看中文字幕| 97视频免费在线| 五月久久久综合一区二区小说| 亚洲第一免费网站| 久久久久久久中文| 青梅竹马是消防员在线| 性8sex亚洲区入口| 亚洲欧洲免费视频| 爱情岛论坛成人| 91视频在线观看| 精品一区二区av| 久久精品电影网| 污免费在线观看| www.欧美日本韩国| 国产精品99久久久| 91高清视频在线免费观看| 国产高清自拍视频| 亚洲天堂中文字幕在线观看| 一区二区欧美国产| 国模一区二区三区私拍视频| 国产人妻精品一区二区三| 在线精品视频在线观看高清| 欧美大片一区二区| 中文字幕亚洲影院| 成人影音在线| 91麻豆swag| 日韩美女毛茸茸| 中日韩精品视频在线观看| 午夜日韩电影| 亚洲精品在线看| wwwwwxxxx日本| www成人免费观看| 国产精品水嫩水嫩| 豆国产97在线| 亚洲欧美偷拍视频| 亚洲成人二区| 精品一区二区电影| 中文人妻一区二区三区| www 久久久| 欧美视频专区一二在线观看| 一女被多男玩喷潮视频| 国产拍在线视频| 日韩欧美成人精品| 天天操天天爱天天爽| 日韩电影精品| 欧美日韩国产色视频| 亚洲精品一区二区三| 亚洲av色香蕉一区二区三区| 日韩黄色片在线观看| 欧美国产日本在线| 精品成人免费视频| 老司机午夜精品视频| 欧美老女人xx| 国产精品视频在| 国产精品99视频| 欧美老肥婆性猛交视频| 亚洲免费在线观看av| 亚洲成人国产| 97精品视频在线| 青娱乐国产在线| 日韩电影一区| 亚洲女人初尝黑人巨大| 亚洲欧美综合视频| 欧美午夜在线播放| 欧美日韩国产高清一区二区 | 18免费在线视频| 亚洲欧美在线观看| 日本在线视频不卡| 亚洲AV第二区国产精品| 国产不卡视频在线播放| 久久久久资源| 老司机在线永久免费观看| 国产在线精品一区二区三区不卡| 国产成人久久精品| 日本视频网站在线观看| 久久精品国产在热久久| 国产精品jvid在线观看蜜臀 | 日韩亚洲欧美高清| 天天爽人人爽夜夜爽| 中文在线免费视频| 亚洲福利视频一区| 国产aaa免费视频| 国产精品va在线观看视色| 午夜视频一区二区| 成人免费播放器| a√中文在线观看| 欧美日韩国产一级片| 中文字幕第3页| 久久365资源| 亚洲精品美女免费| 亚洲一级av无码毛片精品| 日韩久久视频| 26uuu亚洲国产精品| 亚洲日本韩国在线| 国产传媒欧美日韩成人| 亚洲最新在线| 黄网站视频在线观看| 欧美午夜性色大片在线观看| 无码人妻丰满熟妇区毛片蜜桃精品| 蜜桃精品一区二区三区| 亚洲香蕉成视频在线观看| 老司机福利在线观看| 国产精品最新自拍| 国产精品扒开腿做爽爽爽视频| 色老头一区二区| 蜜桃视频一区二区| 97久久精品午夜一区二区| 免费a级片在线观看| 91免费在线看| 亚洲国产成人精品无码区99| 国产专区精品| 欧美xxxx做受欧美| 1级黄色大片儿| 成熟亚洲日本毛茸茸凸凹| 精品毛片久久久久久| 国产黄色片在线播放| 亚洲欧洲日产国码二区| 十八禁视频网站在线观看| 日本黄色成人| 最新中文字幕亚洲| 国产精品30p| 青青草国产精品97视觉盛宴| 91深夜福利视频| 婷婷伊人综合中文字幕| 国产精品天干天干在观线| 成人3d动漫一区二区三区| 国产精久久一区二区| 日韩有码在线视频| 国产手机在线视频| 99久久伊人网影院| 一本久道久久综合| 国产亚洲精彩久久| 亚洲国产天堂久久综合网| 色噜噜噜噜噜噜| 激情偷拍久久| 成人在线激情视频| www在线观看播放免费视频日本| 91精品一区二区三区在线观看| 少妇熟女视频一区二区三区| 欧美激情成人在线| 成人av资源网| 午夜免费视频在线国产| 亚洲成人www| 北岛玲一区二区| 欧美亚韩一区| 国产成人精品免费视频大全最热| h片精品在线观看| 国产视频欧美视频| 91禁在线观看| 国产亚洲欧美日韩在线一区| 青青在线视频免费观看| 久久久久久久性潮| 久久国产精品电影| 神宫寺奈绪一区二区三区| 色婷婷av一区二区| 一起草在线视频| 久久性天堂网| 中文字幕综合在线观看| 激情av综合| 国产精品亚洲第一区| | ...av二区三区久久精品| 在线观看免费看片| 久久综合av| 国产精品嫩草影院久久久| 欧美777四色影视在线| 欧美三区免费完整视频在线观看| 国产乱了高清露脸对白| 免费在线观看视频一区| 大西瓜av在线| 日韩在线观看电影完整版高清免费悬疑悬疑 | 久久不射影院| 尤物精品国产第一福利三区| 黄色在线免费观看| 99精品黄色片免费大全| 青青青在线视频播放| 国产一区二区精品久| 成人免费视频网站| 国语自产精品视频在线看抢先版结局| 欧美黑人xxx| chinese偷拍一区二区三区| 91福利在线导航| 青青草成人免费| 国产99精品国产| 在线观看免费污视频| 日韩精品中文字幕第1页| 激情小说综合区| 粉嫩一区二区三区在线观看| 欧洲s码亚洲m码精品一区| 欧美女优在线| 欧美xxxxxxxx| 亚洲一二区视频| 最新不卡av在线| 无码h肉动漫在线观看| 日日摸夜夜添夜夜添国产精品| 日韩欧美一级在线| www.久久东京| 欧美专区第一页| 欧美卡一卡二| 久久激情五月丁香伊人| 在线观看免费版| 亚洲人成电影网| 亚洲色图另类小说| 亚洲国产中文字幕在线观看| 精品国产亚洲AV| 黑人巨大精品欧美一区二区一视频 | 男人添女荫道口图片| 亚洲有吗中文字幕| 在线精品日韩| a级日韩大片| 亚洲va电影大全| 国产在线精彩视频| 色综合视频一区中文字幕| 国产丝袜在线| 久久亚洲影音av资源网 | 国产一区免费电影| 久热在线视频观看| 久久精品国产一区二区| 91亚洲精品久久久蜜桃借种| 美女一区二区视频| 亚洲一区二区三区观看| 国内成人精品2018免费看| 亚洲视频一二三四| 狠狠色2019综合网| 少妇高潮一69aⅹ| 韩日精品视频一区| 亚洲精品一二三四| 不卡大黄网站免费看| 国产高潮免费视频| 精品制服美女久久| 日日橹狠狠爱欧美超碰| 国产婷婷精品| 欧美韩国日本在线| 一区二区三区四区在线观看国产日韩 | 亚洲国产www| 欧美大片在线观看| 亚洲av激情无码专区在线播放| 日韩精品免费综合视频在线播放| 日本亚洲一区| 中文字幕国内精品| 天天操天天干天天爽| 精品香蕉一区二区三区| 国外av在线| 亚洲国产私拍精品国模在线观看| 天堂在线资源库| 亚洲欧洲在线视频| 欧美jizzhd69巨大| 欧美极品在线播放| caoporm免费视频在线| 欧美激情性做爰免费视频| 僵尸再翻生在线观看| 国产精品第10页| 国产亚洲字幕| 精品国产一区二区三| 国产欧美日韩精品一区二区三区 | 成人黄色av网| 在线视频亚洲欧美中文| 欧美日韩精品免费观看| 豆花视频一区二区| 99热在线国产| 伊人久久大香线蕉综合网蜜芽| 国产98在线|日韩| 一区二区小说| 国产卡一卡二在线| 亚欧成人精品| 亚洲av无日韩毛片久久| 91麻豆精东视频| 欧美激情精品久久久久久免费| 国产拍欧美日韩视频二区| 粉嫩av懂色av蜜臀av分享| 国产日韩综合av| 精品99久久久久成人网站免费| 欧美性猛交xxxx免费看漫画| 国产精品国产av| 亚洲精选中文字幕| 在线看福利影| 欧美激情第1页| a成人v在线| 国产有码一区二区| 24小时成人在线视频| 黑人中文字幕一区二区三区| 午夜精品视频一区二区三区在线看| 国产精品视频一区二区三区四区五区| 狠狠色丁香久久婷婷综合_中 | 国产目拍亚洲精品99久久精品| 精品一区二区三区四| 欧美日韩免费不卡视频一区二区三区 | 天堂网av2018| 色综合天天做天天爱| 天天干天天色综合| 精品久久久久一区二区国产| 日本欧美在线视频免费观看| 青青草一区二区| 狠狠一区二区三区| 91网站在线观看免费| 国产在线国偷精品免费看| 五月激情四射婷婷| 欧美在线免费观看亚洲| 一级黄色片免费| 一本一道久久a久久精品逆3p | 国产刺激高潮av| 亚洲精品www久久久| 中文在线字幕免费观看| 成人免费激情视频| 99久久久久久中文字幕一区| xxxx一级片| 国产嫩草影院久久久久| 丁香社区五月天| 亚洲人精品午夜在线观看| 涩涩在线视频| 国产精品一区二区三区成人| 欧美肉体xxxx裸体137大胆| 一道本在线观看视频| 美日韩一区二区| 国产精品麻豆免费版现看视频| 一区二区在线观看视频| 国产欧美一区二区三区在线看蜜臂| 日韩女优av电影| 深夜国产在线播放| 国产999在线| 国产欧美亚洲精品a| 久久九九国产视频| 欧美国产精品专区| 中文字幕免费高清在线观看| 欧美成人午夜电影| 91黄色在线| 国产欧美一区二区视频| 国产欧美高清| 国产全是老熟女太爽了| 在线视频欧美精品| 91大神在线网站| 成人免费看吃奶视频网站| 欧美区亚洲区| 亚洲综合自拍网| 欧美吻胸吃奶大尺度电影| 色的视频在线免费看| 91久久久久久久久久久久久| 欧美日韩专区| 人妻无码中文久久久久专区| 91福利区一区二区三区| 日本电影全部在线观看网站视频 | 在线视频 91| 欧美成人免费观看| 久久黄色影视| 亚洲精品久久久中文字幕| 亚洲日本va在线观看| 亚洲av无码不卡| 亚洲福利视频免费观看| www.精品| 国产一区二区三区奇米久涩| 免费亚洲一区| 久艹在线观看视频| 亚洲国产精彩中文乱码av| 电影亚洲精品噜噜在线观看| 国产综合欧美在线看| 久久综合图片| 全网免费在线播放视频入口 | 国产一区在线电影| 黄色片一级视频| 亚洲人成在线播放网站岛国| 秋霞视频一区二区| 国产精品视频一区二区三区四| 中国成人一区| 人妻大战黑人白浆狂泄| 3d动漫精品啪啪一区二区竹菊| 18aaaa精品欧美大片h| 亚洲欧洲中文| www.日韩精品| 国产999久久久| 久久国产精品偷|