python 中用什麼鍵縮排 —— tab 還是空格?
python 中用什麼鍵縮排—— tab 還是空格?
實驗設計
實驗環境:Python 3.5.2
特別說明:我的編輯器設定tab寬度是4個空格,可是程式碼發到CSDN上就變成8個空格了,真奇怪。請各位看官見諒。
假設要縮排的塊有3行。程式碼如下
if 10>4:
print("hello")
print("hello")
print("hello")
其中2~4行是要縮排的塊語句。
實驗內容如下:
- 每一行都用1個 tab 鍵縮排,注意:編輯器中沒有設定把 tab 轉換為空格,也就是說 tab 就是 tab,它的 ASCII 值是 0x09
- 第一行用1個 tab,第二行用 2個 tab, 第三行用1個 tab,看看會不會報錯
- 用空格鍵縮排,每一行都用1個空格。空格的 ASCII 值是 0x20
- 第一行用1個空格,第二行用1個空格,第三行用2個空格,看看會不會報錯
- 混合用tab和空格:第一行用1個tab(編輯器中設定一個tab的寬度是4個空格),第二行用1個tab,第三行用4個空格,看看會不會報錯
- 混合用tab和空格:每一行都用4個空格 + 一個tab
實驗過程
實驗1
每一行都用1個 tab 鍵縮排,程式碼看起來是這樣的:
if 10>4:
print("hello")
print("hello")
print("hello")
執行結果是:
hello
hello
hello
沒有報錯。
我們看一下程式碼的 ASCII,以確定用的確實是 tab
tab 的 ASCII 值是 0x09, 它前面的 “0D 0A”是Windows的回車。
實驗2
第一行用1個 tab,第二行用 2個 tab, 第三行用1個 tab,看看會不會報錯。程式碼看起來這樣:
if 10>4:
print("hello")
print("hello")
print("hello")
執行結果報錯了,第3行有錯
File "tab_or_space.py", line 3
print("hello")
^
IndentationError: unexpected indent
看一下 ASCII 碼,確定確實用了不同個數的 tab
通過上面的2個實驗,可以得出結論:
用 tab 縮排是可以的,但是要保證每行用同樣個數的 tab 。
實驗3
用空格鍵縮排,每一行都用1個空格。程式碼看起來這樣:
if 10>4:
print("hello")
print("hello")
print("hello")
看一下 ASCII 碼,確定我們用的是空格(ASCII 值是 0x20)
執行結果呢?沒有問題,和實驗1的結果一樣,這裡就不貼了。
實驗4
第一行用1個空格,第二行用1個空格,第三行用2個空格,看看會不會報錯
程式碼如下:
if 10>4:
print("hello")
print("hello")
print("hello")
執行時候報錯了,第4行有錯
File "tab_or_space.py", line 4
print("hello")
^
IndentationError: unexpected indent
通過實驗3和實驗4,可以得出結論:
用空格縮排是可以的,但是要保證每行用同樣個數的空格 。
實驗5
混合用tab和空格:第一行用1個tab(編輯器中設定一個tab的寬度是4個空格),第二行用1個tab,第三行用4個空格。
首先對編輯器做一個設定,我用的是 notepad++
TAB 的寬度是4,並且沒有勾選“替換為空格”
程式碼看起來是這樣的(感覺很整齊):
if 10>4:
print("hello")
print("hello")
print("hello")
看一下 ASCII 碼,就知道空格和 tab 混用了。
執行結果呢?
File "tab_or_space.py", line 4
print("hello")
^
IndentationError: unindent does not match any outer indentation level
第4行報錯了。
我們把程式碼調整一下,第一行用1個tab,第二行用4個空格,第三行用4個空格。
ASCII 的截圖是:
執行結果是:
File "tab_or_space.py", line 3
print("hello")
^
IndentationError: unindent does not match any outer indentation level
第三行報錯。
也就是說,空格和tab不能混用,但是下這個結論還不夠嚴謹,於是我設計了實驗6。
實驗6
混合用tab和空格:每一行都用4個空格 + 一個tab
哦,我想起來了,貼 ASCII 碼實在是麻煩,編輯器有一個顯示空格和製表符的功能。我們們顯示出來後貼個程式碼截圖圖。
執行結果呢?你猜猜。哈哈,成功執行。
hello
hello
hello
雖然可以成功執行,但這樣做就是“作”。你能記住到底用多少個空格和tab嗎?我是記不住。
實驗結論
做了這麼多實驗,終於可以得出結論了:
Python中縮排可以用空格,也可以用tab,甚至可以混用(比如每一行你先用1個tab,再用4個空格,再用2個tab,再用4個空格);
不管你怎麼縮排的,你都要保證,第二行和第一行用的字元一樣,第三行和第二行用的字元一樣,…… ,也就是每一行用的字元一樣。
最佳實踐
其實 Python 並沒有強制要求你用Tab縮排或者用空格縮排,但在 PEP8中,建議使用4個空格來縮排。
Python Enhancement Proposals index 8 —— Style Guide for Python Code
https://www.python.org/dev/peps/pep-0008/
Use 4 spaces per indentation level.
有人會問,為什麼用空格?用 tab 多方便。
我要說:不僅僅是python,對於任何程式語言來說用space替代tab都是一個好的選擇。
因為程式碼檔案可能會在不同的環境、用不同的編輯器開啟。對於space的處理,幾乎所有的編輯器、OS都是一樣的;而對於tab的處理卻不盡相同,有的會直接展開成空格,有的不會,就算展開為空格,有的是4個,有的是8個……這樣會造成程式碼的格式看起來不一致。對於python來說這個問題更加致命,因為縮排是python語法的一部分——python靠縮排表示塊結構。對於Python,就算看起來整齊,也不能保證每一行都用了一致的tab或空格,所以會惹來很多麻煩。
又有人問,每次按4個空格多麻煩,有沒有簡單點的方法?
當然有了,對於任何一個編輯器或者IDE,一般都有配置選項,可以設定把 TAB 鍵展開為4個空格。
notepad++ 應該這樣設定:
設定好後,我嘗試敲擊TAB,發現其實被換成了4個空格。
對於 VIM,可以這樣設定
set tabstop=4 "設定Tab顯示的寬度為4個空格
set expandtab "設定將Tab自動展開成為空格
= 全文完 =
參考資料
【1】https://segmentfault.com/q/1010000000158915
相關文章
- 寫程式碼時,縮排使用 tab 還是空格?
- 為什麼程式碼縮排時用 Tab 超級棒?
- Python中縮排是什麼?Python特點介紹!Python
- python什麼時候縮排Python
- html的空格程式碼是什麼HTML
- ps放大縮小快捷鍵是什麼 ps裡面放大縮小怎麼操作
- python縮排Python
- python程式語言如何縮排?有哪些快捷鍵?Python
- source insight 儲存時刪除多餘空格,去除多餘空格 space tab鍵
- cad縮小比例快捷鍵命令是什麼 cad圖太大了怎麼縮小比例
- Python執行快捷鍵是什麼?有哪些常用快捷鍵?Python
- VIM編譯器:設定行號和[Tab]的縮排空格數目編譯
- python 縮排問題Python
- 什麼是關鍵 CSSCSS
- Python tab鍵自動補齊Python
- 為什麼使用縮排來分組語句?15個為什麼,幫助你更好的理解Python!Python
- 什麼是python?python有什麼用途?Python
- 什麼是PythonPython
- eslint配置首行縮排兩個空格,export default不頂格EsLintExport
- 學Python選什麼系統好?Windows還是Linux?PythonWindowsLinux
- JS縮排的問題(還在更新中...)JS
- linux 設定tab為4個空格Linux
- Python是什麼?為什麼要掌握python?Python
- Python是什麼意思?Python有什麼用?Python
- mac截圖快捷鍵是什麼怎麼設定 mac截圖快捷鍵是ctrl加什麼Mac
- Python是什麼語言?Python底層語言是什麼?Python
- 什麼是Python?Python為什麼這麼搶手?Python
- python arange是什麼Python
- python字典是什麼Python
- python re是什麼?Python
- python是什麼蛇Python
- python title是什麼Python
- python 是什麼意思Python
- python rabbitmq是什麼PythonMQ
- python wheel是什麼Python
- Python是什麼?為什麼Python受歡迎?Python
- Python是什麼意思?Python幹什麼用的?Python
- 如何解決小括號還有縮排的