当前位置: 首页 > 科技观察

醒来!Python已经支持中文变量名了!

时间:2023-03-22 11:15:35 科技观察

最近在翻两本比较新的Python书籍,发现都犯了严重的低级错误!这两本书是《Python编程:从入门到实践》和《父与子的编程之旅》,都是畅销书,都在2020年10月发布新版本,全部使用Python3.7+的语法。但是在关于变??量命名规则的部分,他们犯了同样的错误,就是还在沿用Python2时代的说辞,误以为命名只支持“字母、数字、下划线”的组合。事实上,Python3.x已经支持完整的Unicode编码,比如支持使用中文作为变量名。>>>Name="Python猫">>>print(f"我是{name},欢迎关注!")我是Python猫,欢迎关注!由于我手头没有其他样本,我不确定有多少新版书籍仍然沿用旧规则。但是,翻译书籍大概率会出现这样的问题。另外,国内一些不严谨的书籍也可能因为借用了过时的资料而出错。这样一来,恐怕有些刚接触Python的同学会形成错误的理解。虽然这可能不会造成严重的问题,但这是应该避免并且很容易避免的问题。因此,我觉得这个话题值得一谈。编程语言中有一个很常见的概念,就是标识符(identifier),通常称为名称(name),用来标识变量、常量、函数、类、符号等实体的名称。定义标识符时,必须考虑一些基本规则:它可以包含哪些字符?它区分大小写吗?(即区分大小写)是否允许某些特殊词?(即关键字/保留字)对于第一个问题,大多数编程语言在早期版本中都遵循这样的规则:标识符由字母、数字、下划线组成,不能以数字开头。少数编程语言有例外,也支持使用$、@、%等特殊符号(如PHP、Ruby、Perl等)。Python的早期版本,准确的说是3.0之前的版本,遵循了上面的命名约定。以下是官方文档中的描述:identifier::=(letter|"_")(letter|digit|"_")*letter::=lowercase|uppercaselowercase::="a"..."z"大写::="A"..."Z"数字::="0"..."9"来源:https://docs.python.org/2.7/reference/lexical_analysis.html#identifiers然而,这rule从3.0版本开始就被破坏了。最新的官方文档变成了这样:来源:https://docs.python.org/3/reference/lexical_analysis.html#identifiers随着互联网的普及,各国语言进入语境国际化,编程语言对国际化的需求也与时俱进。Unicode(译为统一码,UniversalCode)编码标准于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书籍中变量命名规则的内容已经过时,切勿被其误导!Python3作为面向现代化/国际化的语言,对Unicode编码有很好的支持。至于在项目中是否使用中文命名标识符,那是另外一个问题了……本文转载自微信公众号「蟒猫」,可通过以下二维码关注。转载本文请联系Python猫公众号。