Python到底能不能用中文變量名?
大家好,歡迎來到 Crossin的編程教室 !
變量命名是編程中非?;A(chǔ)的一個操作。所有的編程入門書籍都會提及,所有編程學(xué)習(xí)者也都了解過。
先考考大家:以下幾個變量名,在Python哪些是可以的,哪些是不行的?
age
await
__abc__
v index
player.no
2num
變量1
count-2
??o??
______
adfijaosdfjoadfqowenqoiqiefknyuq2ogn872u3hbasrads23jnfuyadvewnfoaoidv
命名規(guī)范
對于Python來說,變量命令規(guī)范包括以下幾點:
變量名可由字母、數(shù)字和下劃線組成,不能包含空格和其他特殊字符。
變量名必須以字母或下劃線開頭,不能以數(shù)字開頭。
變量名區(qū)分大小寫,例如 age 和 Age 是不同的變量名。
變量名不應(yīng)該與 Python 中的關(guān)鍵字(如if、else、while等)重復(fù)。
很多書籍和教程里都是上面這么說的,實際用著也沒問題。但這里就存在一個問題:
變量名里到底能不能有中文?
按照上述規(guī)則,應(yīng)該是不可以的,因為中文不屬于「字母、數(shù)字和下劃線」。
但只要你動手拿Python試一下,就會發(fā)現(xiàn)是可以運(yùn)行的:
這是怎么回事?難道那些教程都寫錯了?
是的,錯了。但也可能他們在一開始寫的時候還沒錯。
因為在Python2的早期版本中,的確是不能用中文作為變量名。不過后來早就可以了,到了Python3就全面支持了。
不僅是中文,Unicode中的其他語言文字(比如日語、俄語、泰語等)也都可以用在變量名中。但注意不是所有字符都可以,比如中文全角的標(biāo)點、emoji都不行??梢源笾吕斫鉃椋焊鞣N語言的「文字」都是可以的。
不過,是不是要真的用中文來命名,那就見仁見智了。比如你覺得在代碼中,「最大寬度」和「maxWidth」哪一個看著更舒服?
另外,中文變量名依然有可能在代碼協(xié)作和分發(fā)的過程中出現(xiàn)編碼問題。所以通過仍不鼓勵使用非 ASCII 字符作為變量名。
命名建議
除了上述必須遵守的命名規(guī)范外,變量命名還需要注意其可讀性和可維護(hù)性。
以下是一些變量命名建議:
變量名應(yīng)該具有描述性,能夠清晰地表達(dá)變量所表示的含義,且長度不應(yīng)過長。
在變量名中不應(yīng)該使用單個下劃線作為前綴,例如 _name,這種命名方式通常用于私有變量。
在變量名中不應(yīng)該使用雙下劃線作為前綴和后綴,例如 __name__,這種命名方式通常用于類的特殊方法和屬性。
回到一開始的那幾個變量名:
age? ?
await? ? 這是Python的語法保留字
__abc__? ? 可以但不建議,這種寫法通常是用在類的魔術(shù)方法上
v index? ? 不能有空格
player.no? ? 如果player是一個對象,這樣可以調(diào)用其no屬性,但作為一個變量名是不行的
2num? ? 數(shù)字不能放在第一位
變量1? ? 中文是可以的
count-2? ??
??o??? ? 這其實是某種語言的字母(我也不知道是哪種),所以也是可以的
______? ? 你以為這是一條分割線嗎?不,它也可以是變量,但同樣不建議
adfijaosdfjoadfqowenqoiqiefknyuq2ogn872u3hbasrads23jnfuyadvewnfoaoidv? ? 太長,可以但不建議
說實話,變量命名的規(guī)則并不復(fù)雜,但寫代碼時候怎么選一個合適的變量名常常讓人糾結(jié)到頭禿。不怪有人說,有了 ChatGPT 之后,最大的好處是不用再糾結(jié)命名了。
在過往的工作和教學(xué)過程中,我經(jīng)常還見到這樣命名的,看看你有沒中槍:
怎么方便怎么來:a,b,c,d,不夠了就 a1,a2,a3……
拼音,全拼也就算了,還經(jīng)常拼錯,搞錯平舌翹舌,前鼻音后鼻音……更有甚者用拼音首字母,那我只能說句yyds了
你喜歡怎么命名變量?歡迎在留言區(qū)中分享。
