Python对CJK全角字符标识符的处理机制及多语言特性问询
Python全角ASCII类标识符的自动转换问题
问题背景
Python允许使用Unicode字符作为标识符,而非仅局限于ASCII字符,例如:
my_variable = 'var 1' # 普通ASCII字符作为变量名 我的变量 = 'var 2' # 中文作为变量名 print(my_variable) print(我的变量)
上述代码可正常输出:
var 1 var 2
但CJK(中、日、韩)字符中存在一类与ASCII字符外观相似但编码完全不同的全角字符,例如:
- 半角A:UTF-8
\x41,Unicode\u0041 - 全角A:UTF-8
\xEF\xBC\xA1,Unicode\uFF21
人类视觉上二者几乎一致,但计算机将其视为完全不同的字符。
基于此编写如下代码时,出现了意外行为:
my_var = 'var 1' # 普通ASCII字符变量名 my_var = 'var 2' # CJK全角字符组成的变量名 print(my_var) print(my_var)
预期输出为var 1和var 2,但实际输出均为var 2;打印locals()后发现,Python似乎自动将CJK全角字符转换为了对应的ASCII字符。
技术疑问
- Python为何会自动进行该转换?是否有相关PEP或官方议题讨论?
- Python在其他场景下是否也会自动转换此类字符?已测试字典中
'my_var'与'my_var'为不同键,其他场景的处理方式如何? - 该行为在编程语言设计中是否常见?例如C、Java、JavaScript、PHP等语言对这类字符的处理方式是怎样的?
场景区分需求
此外,希望明确:在哪些场景下my_var与my_var会被视为同一标识符,哪些场景下则不会?
内容的提问来源于stack exchange,提问作者Vespene Gas
相关产品推荐
相关产品推荐

