当前位置: 首页 > 后端技术 > Python

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

时间:2023-03-26 16:23:06 Python

我最近在翻两本较新的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|大写小写::="a"..."z"大写::="A"..."Z"数字::="0"..."9"来源:https://docs.python.org/2.7/r...不过这个规则从3.0版本开始就被打破了。最新的官方文档变成了这样:来源:https://docs.python.org/3/ref...随着互联网的普及,各国语言进入国际化的大背景下,并且编程语言也随着时代的变化,国际化的需求逐步提升。Unicode(译为统一码,UniversalCode)编码标准于1994年发布,随后逐渐被主流编程语言所接受。到目前为止,至少有73种编程语言支持Unicode变量名(数据基于:https://rosettacode.org/wiki/...)。2007年,Python在设计划时代的3.0版本的时候,官方也考虑到了对Unicode编码的支持,于是重要的《PEP 3131 -- Supporting Non-ASCII Identifiers》诞生了。来源:https://www.python.org/dev/pe...其实除了我们最关心的中文,Unicode字符集也包含了很多内容。命名变量时,以下用法是可行的(慎用,万一中招,本人概不负责...):>>>ψ=1>>>Δ=1>>>?_?="你好》综上所述,一些关于变量命名约定的Python书籍已经过时,不应被误导!作为面向现代化/国际化的语言,Python3对Unicode编码有很好的支持。至于在项目中是否使用中文命名标识符,那是另外一个问题了……