90%的人都不知道,Python已经支持中文变量名啦!

6d06e7a75db19ade1214ecd430cfc25c.png

最近,我在翻阅两本比较新的 Python 书籍时,发现它们都犯了一个严重的低级错误!

这两本书分别是《Python编程:从入门到实践》和《父与子的编程之旅》,它们都是畅销书,都在 2020 年 10 月出了新版本,都使用 Python3.7+ 版本的语法。

e680c4fd9986193c38a810ee3cfecda0.png

然而,在关于变量的命名规则部分,它们犯下了一样的错误,即还在使用 Python2 时代的那套说辞,误以为命名仅仅支持“字母、数字和下划线”的组合。

71e4d843a21ce17bd8ae93f93db2d09c.png

事实上,Python3.x 已经支持全面 Unicode 编码,比如支持使用中文作为变量名。

>>> 姓名 ="Python猫"
>>> print(f"我是{姓名},欢迎关注!")
我是Python猫,欢迎关注!

由于我手头上没有其它样本,所以,我不确定有多少新版的书籍还在使用老的规则。但是,翻译类的书籍大概率都会有这样的问题,另外,有些不严谨的国内书籍,也可能因为借鉴了过时的材料而犯错。

如此一来,恐怕有些新接触 Python 的同学,就会形成错误的认识。虽然这可能不会造成严重的问题,但是它终归是一个应该避免而且很容易就能避免的问题。

因此,我觉得这个话题值得聊一聊。

在编程语言中有一个很常见的概念,即标识符(identifier),通常又会称之为名字(name),用于标识出变量、常量、函数、类、符号等实体的名字。

在定义标识符时,有一些必须要考虑的基本规则:

  • 它可以由哪些字符组成?

  • 它是否区分大小写?(即大小写敏感)

  • 它是否允许出现某些特殊的单词?(即关键字/保留字)

对于第一个问题,大多数的编程语言在早期版本都遵循这条规则:标识符由字母、数字和下划线组成,并且不能以数字为开头。 少数的编程语言有例外,还支持使用$、@、%等特殊符号(例如PHP、Ruby、Perl等等)。

Python 的早期版本,确切地说是 3.0 之前的版本,就遵循以上的命名规则。下面是官方文档中的描述:

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"
1b9ac423ee0bc7c2a3e2ecaee94d27b8.png

出处:https://docs.python.org/2.7/reference/lexical_analysis.html#identifiers

但是,这条规则从 3.0 版本起,就被打破了。最新的官方文档已经变成了这样:

94d1db19e27de1f78d767486683f52de.png

出处: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》。

a4aefde2d108aa29a78ce988a74a22f7.png

出处:https://www.python.org/dev/peps/pep-3131

事实上,除了我们最关心的中文,Unicode 字符集还包含非常非常多的内容。

在对变量命名时,下面这些用法都是可行的(谨慎使用,如若被打,本猫概不负责……):

>>> ψ = 1
>>> Δ = 1
>>> ಠ_ಠ = "hello"

综上所述,某些 Python 书籍中关于变量命名规则的内容已经过时了,不应该被其所误导!

Python 3 作为一门面向现代化/国际化的语言,对于 Unicode 编码有很好的支持。至于该不该在项目中使用中文给标识符命名,那就是另外的问题啦……

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看200个Python案例!

<think>好的,我现在需要回答用户的问题:Python 3.x是否支持使用中文作为变量名。首先,我要回顾一下自己知道Python语法规则。 记得Python变量名规则是必须以字母或下划线开头,后面可以跟字母、数字或下划线。这里的“字母”是否包括Unicode字符呢?根据之前学过的知识,Python 3确实支持Unicode标识符,也就是说可以使用中文、日文等非ASCII字符作为变量名过,用户可能对这一点太确定,所以需要确认。 然后,我需要查阅提供的引用内容。引用[2]提到,Python 3.x源码文件默认使用utf-8编码,因此使用中文更方便,还给出了例子:中国 = &#39;china&#39;。引用[3]也指出判断题中的正确选项是可以在Python 3.x中使用中文变量名。这说明官方是允许的。 但是要注意,虽然技术上可行,但在实际编程中是否推荐呢?可能用户还想知道是否有潜在的问题。比如,团队协作时如果其他习惯中文变量名,可能会影响代码可读性。此外,某些IDE或工具可能对非ASCII字符的支持够好,但这Python本身的限制。 另外,引用[1]提到在Python 3.x中能使用汉字作为变量名,这似乎与引用[2][3]矛盾。这里可能存在引用错误或者用户提供的引用内容有误。需要仔细核对。根据Python官方文档,Python 3确实允许Unicode变量名,包括中文,所以引用[1]的说法应该是错误的,可能题目中的判断有误,或者引用的上下文有其他条件限制,比如特定环境或版本问题。 总结起来,Python 3.x支持中文变量名,但需确保源码文件保存为UTF-8编码,这在Python 3中是默认的。同时,虽然允许,但在实践中应谨慎使用,遵循团队规范和可读性原则。</think>在Python 3.x中,**支持使用中文作为变量名**,但需注意以下规则和实践建议: --- ### 1. **技术可行性** Python 3.x默认使用UTF-8编码,允许变量名包含Unicode字符(包括中文)[^2][^3]。例如: ```python 中国 = "China" print(中国) # 输出:China ``` --- ### 2. **语法规则** - **变量命名需满足**: - 以字母或下划线开头(中文属于Unicode字母范畴)。 - 能使用关键字(如`if`、`class`)或内置函数名(如`print`、`sum`),否则会覆盖原有功能[^3]。 - **合法示例**: ```python 年龄 = 25 _温度 = 36.5 ``` --- ### 3. **注意事项** - **可读性**:虽然中文变量名直观,但可能影响国际化协作或代码简洁性。 - **工具兼容性**:部分IDE或工具可能对非ASCII字符支持完善(如自动补全功能)。 - **编码一致性**:确保源码文件保存为UTF-8格式(Python 3默认支持)。 --- ### 4. **与Python 2.x的区别** Python 2.x默认使用ASCII编码,需显式声明`# -*- coding: utf-8 -*-`才能使用中文变量名,而Python 3.x无需此操作。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值