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

Unicode python源代码中允许一些utf8字符,有些不允许,unicode,python-3.x,Unicode,Python 3.x,我注意到我不能在python源代码中使用所有unicode字符 当 是完全正确的(尽管是荒谬的[可能是吧]) 这是不允许的(即下标零) 我也不能使用其他一些字符,其中大部分我识别为字母以外的字符(例如数学运算符)。我一直认为,如果我坚持我知道的规则,即用字母和数字组合名字,以字母作为第一个字符,一切都会好起来。现在,下标0显然是一个“数字”。所以我的印象是错误的 我知道我应该避免使用特殊字符。然而,在我看来,上面的函数定义(即指数衰减函数)是完全合理的,因为它永远不会改变,而且它非常优雅地传达了

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

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

这是不允许的(即下标零)

我也不能使用其他一些字符,其中大部分我识别为字母以外的字符(例如数学运算符)。我一直认为,如果我坚持我知道的规则,即用字母和数字组合名字,以字母作为第一个字符,一切都会好起来。现在,下标0显然是一个“数字”。所以我的印象是错误的

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

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

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

我的问题是为什么有些字符可以在那里,而有些字符不能。 下标零会引发错误,标识符中的字符无效,但黑板粗体零可以工作。我想说,两者都同样特殊

我想知道是否有适用于我的情况的一般规则,必须有。看来我的错误不是偶然的

编辑2:

答案由Beau Martínez提供,指给我语言参考,我应该首先看一下:


似乎所有允许的字符都已选择。

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

要么

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

就变量名中实际允许的字符而言,通常限制为字母字符、数字和下划线

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

根据,Python 3允许大量字符作为标识符

零下标字符看起来像一个数字,但它不适用于Python;Python只将0、1、2、3、4、5、6、7、8和9视为数字。它实际上是一个字符,因此可以将其用作标识符(例如,它好像是希腊字符,如Phi)

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


如果您说这是不允许的,可能是因为您没有为源文件指定。它可以通过在源文件的开头使用
#-*-编码:utf-8-*-
(或者使用哪种编码)来指定。

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

  • 字母(
    L
  • 数字(
    N
  • 标记(
    M
  • 标点(
    P
  • 符号(
    S
  • 分隔符(
    Z
  • 其他(
    C
这些组有子组,例如
Lu
大写字母
。根据Python语言参考(3.4.1),首先应该将字符序列规范化为NFKC形式(这实际上意味着用变音符号分解字符并“简化”它们,例如将下标
0
更改为普通
0
)。然后,标识符的开头应该是下划线或字母(整个字母组加上
Nl
-字母数字),再加上一些其他字母符号。当我们看到允许作为标识符延续的字符时,它变得更加有趣。此外,我们还可以使用:
Decimal\u数字
Nd
),它们实际上是0到9之间的数字,但有多种形式,例如
数学单空间数字九
,即字符
\U0001D7FF
(总共70个字符);大多数标记(
M
),除了封闭标记(
Me
)-这里有所有的变音符号(重音);子组
Pc
中的所有字符-标点符号连接器,因此不仅下划线,还包括各种连接(10个字符);一些附加的类似数字的字符(例如埃塞俄比亚数字0到9);中间点(2个字符)


从上面可以看出,下标为
0
N
应被接受为标识符。当我试图从Word粘贴它时,IDLE和Wing 101都将规范化表单插入编辑器(即
N0
)。我怀疑问题的作者试图使用无法正常规范化的下标字符。

对不起,我应该提到我使用的是Python 3。正如您所看到的,我只使用了“特殊”字符,在这些字符中,任何人都不必键入,除非宇宙改变了它对指数衰减的看法。:-)但是,是的,它可能应该被称为decation()。我现在更新了这个问题。FWIW,我也觉得奇怪,一种以科学计算为基础的语言允许标识符“罗马数字五”、“阿拉伯-印度数字五”、“扩展阿拉伯-印度数字五”、“德瓦那加里数字五”、“孟加拉语数字五”、“古尔木基数字五”,我不明白这个答案。在Unicode中只有一个下标零,而在Unicode中是不允许的
def N(N₀, t, λ) -> 'N(t)':
# -*- coding: utf-8 -*-
# coding=utf-8