被“嫌棄”的分號(hào)的一生:不要在Python中使用無(wú)用分號(hào)了
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)
我常在C / C ++語(yǔ)言中看到很多分號(hào)。在代碼中,分號(hào)表示語(yǔ)句終止。Python并未強(qiáng)制使用分號(hào)來(lái)分隔語(yǔ)句,但因?yàn)榉痔?hào)導(dǎo)致Python亂碼的情況可不少。
最近,筆者正在學(xué)習(xí)Python的數(shù)據(jù)科學(xué)課程。講師講解了條件語(yǔ)句并編寫了以下代碼:
- temp =10;if temp <12: print('It is cold'); cold = True;
筆者當(dāng)時(shí)的反應(yīng)是:這太可怕了!分號(hào)僅在Python中的非典型情況下使用。筆者準(zhǔn)備了一篇小指南,解釋為什么不應(yīng)該在Python中使用分號(hào),并列出了少數(shù)特殊情況。
語(yǔ)句終止符
在許多大眾的編程語(yǔ)言中,需要在每個(gè)語(yǔ)句的末尾添加分號(hào)。例如,在C ++中:
- int c =10;
- int a = 5;printf('In C++, semicolon at the end is must');
但Python并非如此。Python是一種簡(jiǎn)潔的編程語(yǔ)言,你不需要添加不必要的字符和語(yǔ)法。在Python中,一條語(yǔ)句結(jié)束于一行的結(jié)尾(方括號(hào),引號(hào)或括號(hào)除外)。例如:
- c = 10
- a = 5print('No semicolons in Python')
語(yǔ)句分隔符
Python中的分號(hào)表示分隔,而不是終止。它允許在同一行中編寫多個(gè)語(yǔ)句。
- print('Statement1'); print('Statement 2'); print('Statement 3')
此語(yǔ)法允許在單個(gè)語(yǔ)句的末尾加上分號(hào):
- print('WhyGod? WHY?');
該語(yǔ)句表示print('...'),然后在下一句終止。因此它實(shí)際上是兩個(gè)語(yǔ)句,其中第二個(gè)為空。即使該語(yǔ)言允許使用分號(hào)分隔語(yǔ)句,但大多數(shù)Python程序員都不會(huì)在其代碼中使用它。
Python應(yīng)該是清晰可讀的。分號(hào)之類的語(yǔ)法字符會(huì)導(dǎo)致不必要的混亂。如果將這樣的代碼發(fā)送給經(jīng)驗(yàn)豐富的Python程序員,他可能不會(huì)再理你了。
- temp =10; cold =False;
- if temp<15: print('It is cold'); cold =True; print('Another statement')
- print(cold); print('Done');
將多條語(yǔ)句強(qiáng)制放在一行上會(huì)使原本簡(jiǎn)單的代碼難以閱讀。
何時(shí)使用分號(hào)?
那么問題來(lái)了,既然分號(hào)既不美觀又礙事,為什么Python中允許使用分號(hào)?
筆者認(rèn)為,這是為了使兩種編程語(yǔ)言之間的轉(zhuǎn)換變得稍微容易一些。具有Java,C ++和PHP背景的程序員習(xí)慣性地將(無(wú)用的)終止符放在每一行的末尾。
但是,在下列這些情況下,分號(hào)也會(huì)派上用場(chǎng):
從Shell運(yùn)行腳本
最常見的一種情況是使用python-c' <script> '從shell運(yùn)行一個(gè)簡(jiǎn)短的腳本。因?yàn)椴荒茉诖颂幨褂每s進(jìn),所以需要鍵入許多用分號(hào)分隔的表達(dá)式。以下面語(yǔ)句為例:
- python-c 'import math; t = math.pi;print(int(t))’
另一個(gè)用例是exec語(yǔ)句:
- exec('fori in [100,200,300]: print(i);print(i*2)')
評(píng)估表達(dá)式的副作用
圖源:unsplash
在Jupyter Notebook之類的交互式環(huán)境中工作時(shí),最后一個(gè)表達(dá)式返回的值將以字符串形式輸出。評(píng)估某個(gè)函數(shù)的副作用真的會(huì)很煩人,在matplotlib中查看這個(gè)問題會(huì)產(chǎn)生贅余。
筆者將在JupyterNotebook中創(chuàng)建一個(gè)簡(jiǎn)單的直方圖。如下圖所示,運(yùn)行此腳本會(huì)在輸出時(shí)添加多余的一行:Text(0.5,1.0,'Histogram')。
這實(shí)際上是調(diào)用.set_title(...)函數(shù)的返回值。為了抑制輸出,可以在最后一條語(yǔ)句的末尾添加一個(gè)分號(hào):
- axis.set_title('Histogram',size=10);
簡(jiǎn)潔就是偉大,我們?cè)诰帉懘a時(shí)應(yīng)避免添加任何多余的字符。刪掉那些多余的分號(hào)吧,僅在必要時(shí)使用即可。