醒醒!Python已經支持中文變量名啦

2021-01-15 CDA數據分析師

源:Python貓

作者:豌豆花下貓

最近,我在翻閱兩本比較新的 Python 書籍時,發現它們都犯了一個嚴重的低級錯誤!

這兩本書分別是《Python編程:從入門到實踐》和《父與子的編程之旅》,它們都是暢銷書,都在 2020 年 10 月出了新版本,都使用 Python3.7+ 版本的語法。

然而,在關於變量的命名規則部分,它們犯下了一樣的錯誤,即還在使用 Python2 時代的那套說辭,誤以為命名僅僅支持「字母、數字和下劃線」的組合。

事實上,Python3.x 已經支持全面 Unicode 編碼,比如支持使用中文作為變量名。

>>> 姓名 ="Python貓">>> print(f"我是{姓名},歡迎關注!")我是Python貓,歡迎關注!

由於我手頭上沒有其它樣本,所以,我不確定有多少新版的書籍還在使用老的規則。但是,翻譯類的書籍大概率都會有這樣的問題,另外,有些不嚴謹的國內書籍,也可能因為借鑑了過時的材料而犯錯。

如此一來,恐怕有些新接觸 Python 的同學,就會形成錯誤的認識。雖然這可能不會造成嚴重的問題,但是它終歸是一個應該避免而且很容易就能避免的問題。

因此,我覺得這個話題值得聊一聊。

在程式語言中有一個很常見的概念,即標識符(identifier),通常又會稱之為名字(name),用於標識出變量、常量、函數、類、符號等實體的名字。

在定義標識符時,有一些必須要考慮的基本規則:

它可以由哪些字符組成?它是否區分大小寫?(即大小寫敏感)它是否允許出現某些特殊的單詞?(即關鍵字/保留字)對於第一個問題,大多數的程式語言在早期版本都遵循這條規則:標識符由字母、數字和下劃線組成,並且不能以數字為開頭。 少數的程式語言有例外,還支持使用$、@、%等特殊符號(例如PHP、Ruby、Perl等等)。Python 的早期版本,確切地說是 3.0 之前的版本,就遵循以上的命名規則。下面是官方文檔中的描述:identifier ::= (letter|"_") (letter | digit | "_")*letter ::= lowercase | uppercaselowercase ::= "a"..."z"uppercase ::= "A"..."Z"digit ::= "0"..."9"

出處:https://docs.python.org/2.7/reference/lexical_analysis.html#identifiers但是,這條規則從 3.0 版本起,就被打破了。最新的官方文檔已經變成了這樣:

出處:https://docs.python.org/3/reference/lexical_analysis.html#identifiers隨著網際網路的普及,各國語言進入了國際化的語境中,程式語言也與時俱進地增長了對國際化的訴求。Unicode(譯作統一碼、萬國碼)編碼標準在 1994 年發布,隨後逐步被主流的程式語言所接納。到目前為止,至少有 73 種程式語言支持 Unicode 變量名(數據依據:https://rosettacode.org/wiki/Unicode_variable_names)。2007 年,當 Python 正在設計劃時代的 3.0 版本時,官方也考慮了對 Unicode 編碼的支持,於是,誕生了重要的《PEP 3131 -- Supporting Non-ASCII Identifiers》。

出處:https://www.python.org/dev/peps/pep-3131事實上,除了我們最關心的中文,Unicode 字符集還包含非常非常多的內容。在對變量命名時,下面這些用法都是可行的(謹慎使用,如若被打,本貓概不負責……):>>> ψ = 1>>> Δ = 1>>> _ = "hello"綜上所述,某些 Python 書籍中關於變量命名規則的內容已經過時了,不應該被其所誤導!Python 3 作為一門面向現代化/國際化的語言,對於 Unicode 編碼有很好的支持。至於該不該在項目中使用中文給標識符命名,那就是另外的問題啦……

相關焦點

  • python動態添加類對象成員:變量、函數
    pythonyu'yan那麼下面就以下圖中的代碼為例,為大家演示如何給python中的類對象動態的添加變量支持為已創建好的對象動態增加實例變量而不會改變類的原始定義!python也支持動態刪除實例變量,使用del語句即可刪除,如刪除類對象p的name成員變量:# 刪除p對象的name實例變量 del p.name# 再次訪問p的name實例變量
  • 初識python
    :python ,php,等等。4,python的發展。5,python種類。6,變量。變量:就是將一些運算的中間結果暫存到內存中,以便後續代碼調用。1,必須由數字,字母,下劃線任意組合,且不能數字開頭。2,不能是python中的關鍵字。
  • Print在python中充當了什麼角色?變量和賦值語句又是什麼?
    在前篇我們講了python的數據類型,眾所周知,數據是計算機用來做運算用的,運算出來以後,得把結果輸出在計算機裡。那麼python是怎麼把結果輸出到計算機中的呢基本輸出函數 print。b:不能使用python的關鍵字做變量名,如:1、 合法的變量名:a a1 bbb _aaa _Abcd a22b3c2、 不合法的變量名:1a 123 $AA +a3、 python的關鍵字:true, false, None, is
  • 完美契合人類習慣的Python變量和基本數據類型
    做科學計算和數據分析,變量是始終繞不開的話題。學習程序設計語言,理解了變量相當於掌握了一半。不過,不同程式語言對變量的定義、使用和釋放區別很大。Python中的變量到底是什麼,該怎麼樣掌握變量?從我接觸的語言中,Python和Matlab幾乎是最簡單的,特別容易掌握。
  • python教程之python數學運算
    存儲數據變量#兩個變量交換值,通過第三個參數實現print('兩個變量交換值,通過第三個參數實現'); #第一種方法是通過第三個參數實現x=5;#變量賦值y=11; #變量賦值print('交換前',x,y);temp=x;x=y;y=temp;print
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1.版本有限制的代碼,可以通過以上方法來判斷python版本是否符合要求。>>> sys.exit()該函數也可以添加一個參數,默認為0,表示正常退出,其他參數表示非正常退出,支持用字符串來自定義錯誤信息
  • python交互式shell-ipython
    直接輸入python就可以進入默認的shell,但是都沒有提示,用起來不是很爽。這時候就可以用上ipython。IPython 是一個 python 的交互式 shell,比默認的python shell 好用得多,支持變量自動補全,自動縮進,支持 bash shell 命令,內置了許多很有用的功能和函數。
  • 數據科學的Python軟體包
    巨大的社區支持Python具有廣泛的社區支持之一,在dev op社區上存在各種活躍的論壇,python開發人員在該論壇上發布他們的錯誤,而社區則試圖幫助他們。各種用於數據科學的Python庫到目前為止,我們已經介紹了什麼是數據科學以及為什麼要使用Python,現在讓我們討論可用於數據科學的各種python庫。1.
  • 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!
    瀏覽器版本過低,暫不支持視頻播放3.1.3、比較(關係)運算符用於對變量或表達式的結果進行大小,真假的比較,返回結果True 、False,通常用在條件語句中作為判斷的依據。原始碼:python = 95 # 定義變量,存儲python的分數english = 92 # 定義變量,存儲english的分數c = 89 # 定義變量,存儲C語言的分數
  • 科悟學院介紹什麼是Python、python能做什麼?
    這是很多人想知道的,今天小編就給你揭秘一個行業——Python(AI人工智慧),有人會問python到底是什麼?能做什麼?下面科悟學院介紹什麼是python和python能做什麼,希望對於正在學習的你有所幫助。
  • Python基礎學習之常用六大數據類型
    Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。變量其實本質上是一個具有特殊格式的內存,變量名則是指向這個內存的別名。python中的變量不需要聲明,所有的變量必須賦值了才能使用。
  • Python基礎教程(一) - 快速入門
    從今天開始學習python,會將學習到的相關知識整理到這裡。今後的所有內容都基於Ubuntu系統中進行的,和其他語言一樣,讓我們先來"Hello World!"吧。Hello world!#!/usr/bin/python為Linux系統下Python解釋器的路徑,通常python解釋器的路徑安裝在/usr/local/bin或/usr/bin目錄下。
  • Python 拓展之詳解深拷貝和淺拷貝
    id() 函數就是返回對象的內存地址;is 是比較兩個變量的對象引用是否指向同一個對象,在這裡請不要和 == 混了,== 是比較兩個變量的值是否相等。>>> b['name'] = 'leey'>>> b{'name': 'leey', 'like': 'python'}>>> a{'name': 'rocky', 'like': 'python'}結果和我們上面推理的一模一樣,所以理解了對象有類型,變量無類型,變量是對象的標籤
  • 為Python 3.9 版本添加中文關鍵字 — 寫在草蟒 39x 發布之前
    結果是成功 build 出一個 32 位 python.exe。 打開 /Grammar/python.gram 文件,添加中文保留字。作為試驗,筆者僅添加了一個保留字 '函',對應英文的 'def'。語法文件中有三個出現 'def' 的地方需要添加 '函'。
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • Python語言基本語法元素之語句,表達式、賦值語句
    在中文,語句就是以句號為分界的句子。在程式語言中,語句,就是擁有完整意義的代碼結構。例如:rate = 1.6375 # 1林吉特=1.6375人民幣賦值語句上面是一行代碼,就是一個語句。同時它是賦值語句,這個語句把 數值1.6375 賦值給變量rate。賦值,把數據的值,賦予變量。
  • Python初學者請注意!別這樣直接運行python命令
    曉查 編譯整理量子位 報導 | 公眾號 QbitAIPython已經成為全球最受歡迎的程式語言之一。原因當然是Python簡明易用的腳本語法,只需把一段程序放入.py文件中,就能快速運行。而且Python語言很容易上手模塊。比如你編寫了一個模塊my_lib.py,只需在調用這個模塊的程序中加入一行import my_lib即可。
  • Python程式設計師最常犯的10個錯誤,你中招了嗎?
    因其內置了高級數據結構,並支持動態類型和動態綁定,使用Python進行快速應用程式開發十分便利。同時作為一門腳本語言,它兼容部分現有的組件和服務。Python還支持模塊和各種庫的擴展,有助於實現模塊化編程和提高代碼復用率。
  • python字符串、列表內的方法使用
    英文字母 8位 1個字節歐洲16位,2個字節中文24位,3個字節gbk:中文2個字節,英文字母1個字節。python類型int:bit_lenth()bool:True Falsestr: str --->bool :bool(str): ''--->Falsestr例如:s = 'alexsb's1 = s[1]s2 = s[1:3]s3 = s[0:] s[