最近在翻阅两本比较新的Python书籍的时候,发现都犯了一个严重的低级错误!
这两本书分别是《Python编程:从入门到实践》和《父与子的编程之旅》。它们都是畅销书,都有2020年10月的新版本,都使用了Python3.7语法。
图书封面
但是在关于变量命名规则的部分,他们犯了同样的错误,那就是他们还是用了Python2时代的修辞手法,误以为命名只支持字母、数字和下划线的组合。
错误内容
事实上,Python3.x已经支持完整的Unicode编码,例如使用中文作为变量名。
名称='蟒蛇猫'
打印(f)“我是{name},欢迎关注!”)
我是蟒蛇猫,欢迎关注!
由于我手边没有其他样本,我不确定有多少新版本的书仍然使用旧规则。然而,翻译书籍很有可能会出现这样的问题。此外,国内一些不严谨的书籍也可能会因参考过时的资料而出错。
这样一来,恐怕有些刚接触Python的同学会有错误的理解。虽然这可能不会引起严重的问题,但这仍然是一个应该避免的问题,并且很容易避免。
因此,我认为这个话题值得一谈。
编程语言中有一个非常常见的概念,那就是标识符,通常称为name,用来标识变量、常量、函数、类、符号等实体的名称。
定义标识符时,必须考虑一些基本规则:
它可以由哪些字符组成?
区分大小写吗?(即区分大小写)
它允许出现一些特殊的词吗?(即关键词/保留词)
对于第一个问题,大多数编程语言在早期版本中都遵循这个规则:标识符由字母、数字和下划线组成,不能以数字开头。少数编程语言也有例外,也支持$、@、%等特殊符号(如PHP、Ruby、Perl等)。).
Python的早期版本,特别是3.0之前的版本,遵循了上述命名规则。以下是官方文件中的描述:
标识符:=(字母|'_ ')(字母|数字|'_')*
字母:=小写|大写
lowercase:='a '.z '
uppercase:=' A '.z '
digit:='0 '.'9'
蟒蛇2
产地:analysis.html https://docs.python.org/2.7/reference/musical #标识符
然而,从3.0版本开始,这个规则就被打破了。最新的官方文件变成了这样:
正式文件
产地:analysis.html https://docs.python.org/3/reference/logical #标识符
随着互联网的普及,各国语言都进入了国际化的语境,编程语言也与时俱进地增加了国际化的需求。
Unicode(翻译为Unicode,Universal Code)编码标准于1994年发布,随后逐渐被主流编程语言所接受。到目前为止,至少有73种编程语言支持Unicode变量名(根据https://rosettacode . org/wiki/Unicode _ variable _ name)。
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编码有很好的支持。至于标识符在项目中是否应该用中文命名,那是另一个问题.