代码之家  ›  专栏  ›  技术社区  ›  Stefano Palazzo

有些utf8字符在python源代码中允许,有些不允许

  •  7
  • Stefano Palazzo  · 技术社区  · 15 年前

    我注意到我不能在python源代码中使用所有unicode字符。

    def 价(何):
    

    是完全正确的(尽管很荒谬[可能?]),

    def N(N₀, t, λ) -> 'N(t)':
    

    我知道我应该避免使用 特殊的 角色。然而,上面的函数定义(即指数衰减函数)在我看来是完全合理的,因为它永远不会改变,而且它非常优雅地传递了其他程序员使用它所需的所有信息。

    因此,我的问题是,到底哪些字符是允许的,哪些是不允许的?在哪里?

    编辑
    好吧,我好像还不够清楚。我使用的是python3,因此不需要声明源文件的编码。显然,我认为从那时起,我的中文函数定义的工作。

    我的问题是,为什么有些字符被允许在那里,而另一些则不允许。 下标0会引发错误 两者同等 特殊的 我得说。

    我想知道是否有什么一般规则不仅适用于我的情况,而且一定有。看来我的错误不是偶然的。

    编辑2:

    这个 回答 由Beau Martnez提供,他给我指出了语言参考,我首先应该看一下:

    http://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html 似乎所有允许的字符都被选中了。

    3 回复  |  直到 15 年前
        1
  •  4
  •   jesterjunk Michael Burr    10 年前

    根据 language reference ,python3允许大量字符作为标识符。

    重要的是,用键盘输入这些字符有多容易?例如,我不想每次必须调用你的函数时都调出角色映射。将其称为“最大衰变率”或对任何用户更直观的东西,而不仅仅是物理专业的学生,会使您的代码更具可读性。

    如果你说这是不允许的,那可能是因为你没有指定 character encoding 你的源文件。它可以通过 # -*- coding: utf-8 -*-

        2
  •  3
  •   jesterjunk Michael Burr    10 年前

    告诉Python正确的编码是什么:

    https://www.python.org/dev/peps/pep-0263/

    # -*- coding: utf-8 -*-
    

    # coding=utf-8
    

    “下标零”实际上不是一个数字,而是一个下标。

        3
  •  0
  •   Kevin Panko Matthew Woodard    11 年前

    每个Unicode字符都有特定的“属性”,可以在Unicode字符数据库中找到,对于我们来说,来自所谓的一般类别的属性是最重要的。它们允许将所有字符划分为大组:

    • L )
    • 数字( N )
    • 标记( M )
    • P )
    • 符号( S )
    • 分离器( Z
    • 其他( C

    例如,这些组有子组 Lu Uppercase_Letter . 根据Python语言参考(3.4.1),应该首先将字符序列规范化为NFKC形式(这实际上意味着用变音符号分解字符并“简化”它们,例如更改下标) 0 进入正常状态 ). 然后,标识符的开头应该是下划线或字母(整个字母组加上 Nl -字母式数字),再加上一些其他字母式符号。当我们看到允许作为标识符延续的字符时,它变得更加有趣。此外,我们可以使用: Decimal_Numbers Nd ),实际上是0到9之间的数字,但在许多情况下,例如 MATHEMATICAL MONOSPACE DIGIT NINE \U0001D7FF ),但封闭标记除外( Me )-这里有所有的音调符号(重音);子组中的所有字符 Pc -标点符号连接符,因此不仅下划线,而且还有各种连接符(10个字符);一些附加的类似数字的字符(例如埃塞俄比亚文数字0到9);中间点(2个字符)。

    带下标 0 应接受为标识符。当我试图从Word中粘贴它时,IDLE和wing101都将规范化的表单插入到编辑器中(即。 N0