这两本书分别是《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"
python2
出处: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》。
PEP文档
出处:https://www.python.org/dev/peps/pep-3131
事实上,除了我们最关心的中文,Unicode 字符集还包含非常非常多的内容。
在对变量命名时,下面这些用法都是可行的(谨慎利用,如若被打,本猫概不卖力……):
>>>ψ=1>>>Δ=1>>>ಠ_ಠ="hello"
综上所述,某些 Python 书本中关于变量命名规则的内容已经由时了,不应该被其所误导!
Python 3 作为一门面向当代化/国际化的措辞,对付 Unicode 编码有很好的支持。至于该不该在项目中利用中文给标识符命名,那便是其余的问题啦……