python變量為什么不能以數(shù)字開頭
python變量為什么不能以數(shù)字開頭
任何事情只要有人規(guī)定成文了,必定有其原因所在,也就是有其合理性所在。Python變量命名規(guī)則(推薦學(xué)習(xí):Python視頻教程)變量名只能包含字母、數(shù)字和下劃線。
變量名可以字母或下劃線開頭,但不能以數(shù)字開頭,例如,可將變量命名為message_1,但不能將其命名為1_message。
變量名不能包含空格,但可使用下劃線來分隔其中的單詞。例如,變量名greeting_message可行,但變量名greeting message會(huì)引發(fā)錯(cuò)誤。不要將Python關(guān)鍵字和函數(shù)名用作變量名,即不要使用Python保留用于特殊用途的單詞,如print。變量名應(yīng)既簡短又具有描述性。
例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。慎用小寫字母l和大寫字母O,因給他們可能被人錯(cuò)看成數(shù)字1和0;注意:應(yīng)使用小寫的Python變量名。在變量名中使用大寫字母雖然不會(huì)導(dǎo)致錯(cuò)誤,但避免使用大寫字母是個(gè)不錯(cuò)的注意。
那么它為什么不能以數(shù)字開頭呢?這應(yīng)該要從編譯原理的角度來解釋了吧。這是我今天在做腳本解析時(shí)突然想到的。先來說明一下我們的這個(gè)語法解析工具,要解析的腳本很簡單,只包括了&,|,~,=,!=,()和{}等操作符。
開始時(shí)采用了編譯原理的那一套,畫NFA、DFA,找出狀態(tài)然后再寫詞法分析生成Token,接著語法分析將生成的Token根據(jù)語義生成語法樹,**求值。后來想一想,這個(gè)腳本很簡單只需要一個(gè)一個(gè)字符判斷遇到不同類型的字符就進(jìn)入到不同的子函數(shù)中進(jìn)行處理,同時(shí)完成詞法解析和語法分析以及求值的過程。不過無論使用那種方法都需要根據(jù)讀入的字符來判斷當(dāng)前進(jìn)入到哪個(gè)Token里了,這就是問題的關(guān)鍵所在。
為什么說判斷字符屬于哪個(gè)Token是關(guān)鍵呢?假設(shè)我們?nèi)∠袅俗兞棵x中不能以數(shù)字開頭的限制,這時(shí)當(dāng)詞法分析器進(jìn)入到一個(gè)Token分析的起始狀態(tài)時(shí),如果讀取的**個(gè)字符為數(shù)字,那么詞法分析器是無法判斷它當(dāng)前要分析的這個(gè)Token是變量名還是數(shù)字常量了。好,如果你說分析器可以根據(jù)后面的字符來判斷的話,那么如果下一個(gè)字符為字母,那么很容易就判斷出當(dāng)前Token屬于變量名(我們暫且忽略保留關(guān)鍵字),但是當(dāng)如果接下來的百科字符全都是數(shù)字那怎么辦?分析器將無法判斷,因?yàn)樽兞棵亩x中允許數(shù)字的存在。 呵呵,上面也許說的比較繞口難于理解,用句簡單的話來講就是:當(dāng)分析\”123\”這個(gè)字符串的時(shí)候,如果變量名允許**個(gè)字符為數(shù)字,分析器就不知道“123”該是數(shù)值常量還是變量名了。
為什么Python的命名不能以數(shù)字開頭?
Python命名的規(guī)則如下:
1.只能包含字母、數(shù)字和下劃線,且不能以數(shù)字開頭
2.區(qū)分字母大小寫
3.禁止使用保留字(關(guān)鍵字)
python中的命名不能以數(shù)字開頭的原因:
如果變量名允許以數(shù)字開頭的話,那么語法分析器在解析一個(gè)全部為數(shù)字的字串的時(shí)候,就無法高效的判斷它是一個(gè)數(shù)字常量還是一個(gè)變量名了。
Java里為什么變量名不能以數(shù)字開頭
標(biāo)識符用來作為類、方法和變量的名字語法規(guī)則:以字母、下劃線(_)、美元符號($)開始,后跟這三種符號或數(shù)字。至于為什么變量名不能以數(shù)字開頭?我們可以假設(shè)變量名可以以數(shù)字開頭,那么String123=\”數(shù)字開頭\”;inta=123;對于這兩句來說應(yīng)該是對還是錯(cuò)?對于inta=123;來說右邊的123是數(shù)字還是變量名?如果是數(shù)字的話那么沒有錯(cuò);如果是變量名的話就不對了,因?yàn)轭愋筒黄ヅ溲健?/p>
哈哈,有點(diǎn)繞,差不多這個(gè)意思吧,哈哈,希望對你有所幫助。