1. 程式人生 > >Python 為什麼拋棄累贅的花括號,使用縮排來劃分程式碼塊?

Python 為什麼拋棄累贅的花括號,使用縮排來劃分程式碼塊?

大家好,這是“Python為什麼”系列節目的文字稿(**文末有觀看地址**)。 本期話題:Python 為什麼使用縮排來劃分程式碼塊,而不像其它語言使用花括號 {} 或者 “end” 之類的語法? Python 的縮排是一個老生常談的話題,經常有人會提及它,比如 Python 之父在上個月就恰好轉發過一篇文章: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gej2tpfbsfj20o70dmq4c.jpg) 因為這篇文章,Guido 還受邀在 Python Bytes 播客上錄製了一期節目: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gemhl6sns3j20ug0jqtrw.jpg) ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gen4u72qktj20v20kwgnm.jpg) 那麼,Python 為什麼要用縮排來劃分程式碼塊呢? 我收集梳理了幾份材料,接下來將帶大家一起揭曉 Python 這麼做的設計原因: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gen4kbernmj20xm0dujtj.jpg) 1. 縮排語法,更加優雅 2. 縮排語法,更加清晰 3. 使用縮排,保持一致性,避免造成誤讀 4. 使用縮排,程式碼更緊湊,便於瀏覽,沒有累贅 5. 使用縮排,已足夠令直譯器執行,沒必要使用多餘的符號 6. 強制縮排,源自古老的 ABC 語言,Guido 是這門語言的設計者之一 7. 其思想可能出自 Don Knuth(高德納,著名電腦科學家,經典鉅著《計算機程式設計藝術》的作者),他在 1974 年提出,在當時是很時髦和前衛的思想 8. 使用縮排,可以終結大括號放在函式名後面還是再換一行的終極爭論(據說此話題能令不同派系的程式設計師大打出手!) 以上羅列的原因主要來源於 Python 官方文件、官方 wiki 以及 Python 之父的早期訪談。 ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gej3n16gf9j215z0m90wy.jpg) ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gej3mqctuvj20yj0mf77q.jpg) 總而言之,Python 使用縮排語法,體現了它非常優雅、清晰的設計美學,對開發者、讀者以及直譯器,都極為友好。 實話說,我本人非常讚許 Python 的縮排,因此才第一眼就迷上了它,如果是使用了花括號之類的語法,那 Python 就頓時黯淡,也就食之無味了! 大家如何看待 Python 的縮排語法呢?請在評論區發表你的看法吧! ### 參考材料: 1、Guido 發的 twitter:[https://twitter.com/gvanrossum/status/1249549091584892928](https://twitter.com/gvanrossum/status/1249549091584892928) 2、Guido 轉發的關於縮排的文章:[https://web.archive.org/web/20070922223915/http://www.secnetix.de/~olli/Python/block_indentation.hawk](https://web.archive.org/web/20070922223915/http://www.secnetix.de/~olli/Python/block_indentation.hawk) 3、Guido 作客 Python Bytes 播客節目,談論縮排話題:[https://pythonbytes.fm/episodes/show/179/guido-van-rossum-drops-in-on-python-bytes](https://pythonbytes.fm/episodes/show/179/guido-van-rossum-drops-in-on-python-bytes) 4、播客節目的視訊版:[https://www.youtube.com/watch?v=PlvvVXeU0yw&feature=youtu.be](https://www.youtube.com/watch?v=PlvvVXeU0yw&feature=youtu.be) 5、官方文件對縮排的解釋:[https://docs.python.org/3/faq/design.html#why-does-python-use-indentation-for-grouping-of-statements](https://docs.python.org/3/faq/design.html#why-does-python-use-indentation-for-grouping-of-statements) 6、官方早期 wiki 的解釋:[https://wiki.python.org/moin/Why%20separate%20sections%20by%20indentation%20instead%20of%20by%20brackets%20or%20%27end%27](https://wiki.python.org/moin/Why%20separate%20sections%20by%20indentation%20instead%20of%20by%20brackets%20or%20%27end%27) 7、池建強老師 MacTalk 文章:[https://mp.weixin.qq.com/s?__biz=MjM5ODQ2MDIyMA==&mid=2650715803&idx=1&sn=94cd823de3689f40d4ed4c541a1ee791](https://mp.weixin.qq.com/s?__biz=MjM5ODQ2MDIyMA==&mid=2650715803&idx=1&sn=94cd823de3689f40d4ed4c541a1ee791) 首發地址:https://mp.weixin.qq.com/s/byhJnKoKSDnhUNUE9WWopw ### 視訊地址: 1、B站:[https://www.bilibili.com/video/BV1UT4y137Yv/](https://www.bilibili.com/video/BV1UT4y137Yv/) 2、知乎:[https://www.zhihu.com/zvideo/1242823762849959936](https://www.zhihu.com/zvideo/124282376284