Python 2.7的非ASCII标识符

3

我知道在Python 3.x中可以使用非ASCII标识符(PEP 3131)。

x1 = 2
x2 = 4
Δx = x2 - x1
print(Δx)

在Python 2.7中是否有这样的功能?也许,有人将它移植到了2.x分支吗?


1
你为什么要这样做呢?直接使用dx就可以了。 - arshajii
我没有答案,但请不要这样做...只需将其称为delta_x。 - Joran Beasley
@dx:这只是一个简单的例子。在实际的公式表达中,它会像这样:Δδj = ϰ * Áj * Δȳ 对我来说更清晰一些。 - Anton Barycheuski
1
@AntonBarycheuski 这样并没有更清晰。想象一下有人在阅读和编辑你的代码时,很难输入这些字符。请使用其他名称,比如dx或delta_x。 - C0deH4cker
@JoranBeasley:为了额外的学分,试着猜一下在PEP 3131发布期间有多少人开了与APL相关的玩笑,然后去查看邮件列表档案以确认你的近似程度。 :) - abarnert
2个回答

7
不,Python 2 中没有这样的功能;名称仅限于使用 ASCII 字母和数字。
请参阅参考手册中的“标识符和关键字”部分:http://docs.python.org/2/reference/lexical_analysis.html#identifiers

Identifiers (also referred to as names) are described by the following lexical definitions:

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

在Python 3中,PEP 3131 扩展了可能的字符范围。

将其移植到2.x分支几乎没有任何意义;这将是一个需要所有运行您的代码的人安装特殊修补程序并编译解释器的小众“功能”。

请注意,这个更改不是微不足道的;Python 2标识符是字节字符串(而不是Unicode值)。 您必须找到处理标识符的所有位置,并验证它们是否可以处理非ASCII值或为Unicode字符串进行重新调整。 这远远超出了编译器!


1
此外,除非Python开发社区的心态发生巨大改变,否则将永远不会将任何新功能移植到Python 2.x。因此,即使这些都不是真的,它发生的机会也为零。 - abarnert

0

好吧,我是说,技术上这就是你要求的内容:

>>> x1 = 2
>>> x2 = 4
>>> locals()[u'Δx'] = x2 - x1
>>> print locals()[u'Δx']
2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接