56

我想构建一个 Python 函数来计算,

替代文字

并想将我的求和函数命名为 Σ。以类似的方式,想将 Π 用于产品,等等。我想知道是否有办法以这种方式命名 python 函数?

def Σ (..):
 ..
 ..

也就是说,Python 是否支持 unicode 标识符,如果支持,有人可以提供一个例子吗?

谢谢!


最初的动机是我今天看到的一段 Clojure 代码,看起来像,

(defn entropy [X]
      (* -1 (Σ [i X] (* (p i) (log (p i))))))

其中 Σ 是一个宏定义为,

(defmacro Σ
    ... )

我觉得那很酷。


顺便说一句,为了解决一些关于可读性的评论——例如,有很多统计/机器学习代码,能够用符号组合操作将非常有帮助。(特别是对于真正复杂的积分等)

φ(z) = ∫(N(x|0,1,1), -∞, z)

对比

Phi(z) = integral(N(x|0,1,1), -inf, z)

甚至只是 lambda() 的 lambda 字符!

4

5 回答 5

49

(我认为这也很酷,这可能意味着我们是极客。)

您可以使用上面在 Python 3 中的代码来执行此操作。(它至少在我的 Python 3.1 解释器中工作。)请参阅:

但在 Python 2 中,标识符只能是 ASCII 字母、数字和下划线。

于 2010-04-15T22:58:56.707 回答
23

值得指出的是,Python 3确实支持 Unicode 标识符,但只允许使用类似字母或数字的符号(有关完整详细信息,请参阅http://docs.python.org/3.3/reference/lexical_analysis.html#identifiers)。这就是 Σ 有效的原因(请记住,它是一个希腊字母,而不仅仅是一个数学符号),但 √ 无效。

于 2014-02-18T23:31:46.220 回答
19

(这个答案是一个小附录而不是一个完整的答案)

unicode 标识符的附加问题(@mike-desimone 提到,当我认为这是一个很酷的线程并切换到终端来使用它时,我很快发现),是每个字形的多个版本是不等价的,关于你如何到达每个平台上的每个字形。例如 Σ(又名希腊大写字母 sigma,又名 U+03A3,[找不到直接的 mac 输入法])很好,但不幸的是 Σ(又名N-ary Summation,又名U+2211,又名opt/alt- w使用 Mac OS X) 不是有效的标识符。

>>> Σ = 20
>>> Σ
20

>>> ∑ = 20
File "<input>", line 1
  ∑ = 20
  ^
SyntaxError: invalid character in identifier

如果您有多个平台上的多个开发人员为您的代码做出贡献,则专门使用 Σ(通常可能是 unicode 字符)作为标识符可能会产生一些非常难以诊断的错误,例如,直观地调试它:

Σ 看起来与 Σ 非常相似,具体取决于所选的字体

这两个字形在此页面上更容易区分,但根据使用的字体,情况可能并非如此。

除非 Σ 在 Σ 附近打印,否则即使回溯也不会更清晰

  File "~/Dev/play_python33/identifiers.py", line 12
    print(∑([2, 2, 2, 2, 2]))
            ^
SyntaxError: invalid character in identifier
于 2015-04-24T18:43:50.513 回答
16

根据is it bad,您可以使用一些 unicode 字符,但不是全部:您仅限于识别为字母的字符。

>>> α = 3  
>>> Σ = sum   
>>> import math  
>>> √ = math.sqrt  
  File "<stdin>", line 1  
    √ = 3  
      ^  
SyntaxError: invalid character in identifier

此外:我认为能够使用 unicode 作为标识符非常酷——我希望,我可以全部使用。

我使用neo 键盘布局,它在额外的图层上为我提供了希腊语和数学符号:

αβχδεφγψιθκλνοπφστ[&
ωξυζ∀⇐ℂΔ∃ΦΓΨ∫Λ⇔Σ∈ℚℝ∂⊂√∩Ξ

于 2011-08-23T09:40:06.367 回答
6

Python 2.x 不支持 unicode 标识符,因此不支持 Σ 作为标识符。Python 3.x确实支持 unicode 标识符,尽管如果必须使用标识符 A 和 Α(拉丁语 A 和希腊大写字母 alpha)编辑源文件,许多人会感到困惑。Sigma 通常可读性足够,但仍然不和 sigma一样可读,那何必呢?

于 2010-04-15T22:59:31.690 回答