我在玩 Unicode 标识符并偶然发现了这一点:
>>> , x = 1, 2
>>> , x
(1, 2)
>>> , f = 1, 2
>>> , f
(2, 2)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么 Python 会替换 引用的对象,但只是有时?这种行为在哪里描述?
Mar*_*yer 87
所有标识符在解析时都转换为范式NFKC;标识符的比较基于 NFKC。
您可以使用unicodedata来测试转换:
import unicodedata
unicodedata.normalize('NFKC', '')
# f
Run Code Online (Sandbox Code Playgroud)
这将表明在解析中''被转换为'f'。导致预期:
= "Some String"
print(f)
# "Some String"
Run Code Online (Sandbox Code Playgroud)
Eri*_*nil 31
这是一个小例子,只是为了说明这个“功能”是多么可怕:
?_???_?_d????y___?g = 42
print(T?_e?e_?º_e????_?__)
# => 42
Run Code Online (Sandbox Code Playgroud)
在线试试吧!(但请不要使用它)
正如@MarkMeyer 所提到的,即使两个标识符看起来相同,它们也可能是不同的(“CYRILLIC CAPITAL LETTER A”和“LATIN CAPITAL LETTER A”)
? = 42
print(A)
# => NameError: name 'A' is not defined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |