對於程序員來講,其實Tab和空格遠遠不僅是「立場」問題那麼簡單。html
在不一樣的編輯器裏tab的長度可能不一致,因此在一個編輯器裏用tab設置縮進後,在其它編輯器裏看可能縮進就亂了。空格不會出現這個問題,由於空格就佔一個字符的位置。python
衆所周知,Tab在ASCII碼中,編碼是9,而空格是32。這也就是說,當咱們按下一個Tab的時候,即便它看起來就是8個空格(或者4個空格,不一樣的環境下,Tab可能顯示的效果不一樣),對於電腦來講,倒是徹底不同的東西。這也意味着,對於用字符來描述過程的代碼來講,極有可能會是決定性的差別。程序員
尤爲是對於一門用空格縮進來區分代碼層次的語言——Python。編程
咱們來看一段代碼。編輯器
class MyForm(Form): value1 = StringField('value1') value2 = StringField('value2') value3 = StringField('value3') #這行用的是Tab縮進 submit = SubmitField('Submit')
看起來這個value3變量和其餘的變量沒有什麼不一樣,然而卻出現了這樣的報錯——縮進錯誤。佈局
value3 = StringField('value3')優化
^編碼
IndentationError: unexpected indentspa
其實Python並無強制要求你用Tab縮進或者用空格縮進,甚至空格按幾個都沒有強制要求(但在PEP8中建議了使用4個空格做爲縮進:https://www.python.org/dev/peps/pep-0008/),可是卻絕對!絕對不能混用Tab和空格,那麼這裏,是否是空格和Tab的區別就顯得很大了呢?code
這個時候有的童鞋就要說了,我用PyCharm(或者其餘IDE)怎麼歷來都沒有出現這樣的問題呢?
其實,不少IDE對Tab鍵作了各類各樣的優化,其中有一條就是,將Tab鍵展開爲爲空格,也就是說,當你按下Tab的時候,IDE實際上幫你把一個「9」轉換成了四個(或者八個)「32」。可是要注意,不是全部的IDE都幫你作了這樣的工做!同理,對於好純潔好不作做的編輯器Vim來講,確定也不會幫你作這樣的工做了。
既然Tab在不一樣的環境下展示不同,而空格卻永遠都是同樣的。對於一些細緻排版縮進來講(好比說想把每一行的註釋都對齊),用空格也更加精確。這樣看起來,確實是用空格來寫代碼要好於用Tab呢。
空格代替Tab的好處:
1. 空格在各類狀況下代碼都是你想要的樣子。而 tab 僅僅當你與代碼做者的 tab 尺寸設定爲相同時,代碼纔好看。修改 tab 尺寸並不能解決這個問題,由於你很難作到每打開一個文件就修改一次 tab 尺寸,而每一個人一般有不一樣的習慣(POSIX/Unix 標準的 tab 應當爲 8 字符寬度,Linus 大神也規定 Linux 內核中全部代碼的 tab 尺寸爲 8)。若是存在行尾註釋,則 tab 尺寸更加是必須設定爲與做者相同,這就意味着你看不一樣的代碼須要常常修改 tab 尺寸。我看過許多代碼,其使用的 tab 尺寸有從 2,3,4,5,6,8,16 甚至 32 的,若是你使用的 tab 尺寸與做者不一樣,外觀將很不理想。
2. 靠譜的IDE都能解決前進後退增長減小縮進的問題,即使是四個空格,一個退格鍵也能全退了,因此在使用的方便性方面根本不存在問題。——若是抱怨刪除調整還不能有效解決的,你須要研究一下你的編輯器了。實際上增長減小縮進在主流編輯器中都直接有快捷鍵,不管是 tab 仍是空格仍是退格都不多直接被用於縮進。
3. tab 是製表符而不是縮進符,正如在 html 頁面中大量使用<table>進行佈局是個很差的編程習慣同樣,在編程中大量使用製表符佈局一般也不是個好習慣。
通常狀況下,團隊開發都要制定一套編碼規範, 在大部分團隊中,使用4個空格代替Tab是你們默認的。因此很是建議你們使用空格代替Tab, 另外各個IDE(編輯器)都提供了tab自動轉換空格的功能,只要你們設置一下,按下tab鍵就能夠出現4個或者多個空格。