vik*_*sit 49 python unicode identifier
我想构建一个计算的Python函数,
并且想要命名我的求和函数Σ.以类似的方式,想用Π作产品,依此类推.我想知道是否有办法以这种方式命名python函数?
def ? (..):
..
..
Run Code Online (Sandbox Code Playgroud)
也就是说,Python是否支持unicode标识符,如果是这样,有人可以为它提供一个示例吗?
谢谢!
最初的动机是我今天看到的Clojure代码,看起来像,
(defn entropy [X]
(* -1 (? [i X] (* (p i) (log (p i))))))
Run Code Online (Sandbox Code Playgroud)
其中Σ是定义为的宏,
(defmacro ?
... )
Run Code Online (Sandbox Code Playgroud)
而且我觉得这很酷.
顺便说一句,为了解决一些关于可读性的评论 - 例如,有很多统计数据/ ML代码,能够用符号组合操作将非常有帮助.(特别是对于非常复杂的积分等)
?(z) = ?(N(x|0,1,1), -?, z)
Run Code Online (Sandbox Code Playgroud)
VS
Phi(z) = integral(N(x|0,1,1), -inf, z)
Run Code Online (Sandbox Code Playgroud)
甚至只是lambda()的lambda字符!
Pau*_*ite 44
(我认为它也很酷,这可能意味着我们是极客.)
您可以使用上面在Python 3中的代码执行此操作.(至少在我的Python 3.1解释器中可以使用.)请参阅:
但在Python 2中,标识符只能是ASCII字母,数字和下划线.
asm*_*rer 18
值得指出的是,Python 3 确实支持Unicode标识符,但只允许使用字母或数字符号(有关完整详细信息,请参阅http://docs.python.org/3.3/reference/lexical_analysis.html#identifiers).这就是为什么Σ有效(记住它是一个希腊字母,而不仅仅是一个数学符号),但√没有.
Pet*_*ley 14
(这个答案是一个较小的附录,而不是一个完整的答案)
unicode标识符的附加问题(当我认为这是一个很酷的线程并切换到一个终端来玩它时,@ mike-desimone提及我发现很快),每个字形的多个版本都不相同,关于你如何到达每个平台上的每个字形.例如Σ(又名希腊大写字母sigma,又名U + 03A3,[找不到直接的mac输入法])很好,但不幸的是Σ(又名N-ary Summation,又名U + 2211,又名opt/alt- w使用Mac OS X)不是有效的标识符.
>>> ? = 20
>>> ?
20
Run Code Online (Sandbox Code Playgroud)
但
>>> ? = 20
File "<input>", line 1
? = 20
^
SyntaxError: invalid character in identifier
Run Code Online (Sandbox Code Playgroud)
如果在多个平台上有多个开发人员为您的代码做出贡献,那么使用Σ专门(通常可能是unicode字符)作为标识符可能会产生一些非常难以诊断的错误,例如,可视化调试:

这两个字形在此页面上更容易区分,但根据使用的字体,可能不是这种情况.
除非在Σ附近打印Σ,否则即使回溯也不太清楚
File "~/Dev/play_python33/identifiers.py", line 12
print(?([2, 2, 2, 2, 2]))
^
SyntaxError: invalid character in identifier
Run Code Online (Sandbox Code Playgroud)
Arn*_*ide 13
根据它是坏的,你可以使用一些unicode字符,但不是全部:你被限制为标识为字母的字符.
>>> ? = 3
>>> ? = sum
>>> import math
>>> ? = math.sqrt
File "<stdin>", line 1
? = 3
^
SyntaxError: invalid character in identifier
Run Code Online (Sandbox Code Playgroud)
此外:我认为能够使用unicode作为标识符是非常酷的 - 我希望,我可以使用所有.
我使用neo键盘布局,它在额外的图层上提供了希腊语和数学符号:
αβχδεφγψιθκλνοπφστ[&
ωξυζ∀⇐ℂΔ∃ΦΓΨ∫Λ⇔Σεℚℝ∂⊂√∩Ξ
Python 2.x不支持unicode标识符,因此不支持Σ作为标识符.Python 3.x 确实支持unicode标识符,但是如果他们必须编辑源文件,例如标识符A和Α(拉丁语A和希腊语大写字母alpha),很多人会得到交叉.Sigma通常可读,但仍然不是为可读的文字西格玛,何必呢?