1. ホーム
  2. python

[解決済み] Pythonは2つの似たような見た目のUnicode識別子を禁止していますか?

2023-05-28 21:55:23

質問

Unicodeの識別子で遊んでいて、こんなことに遭遇しました。

>>> ????, x = 1, 2
>>> ????, x
(1, 2)
>>> ????, f = 1, 2
>>> ????, f
(2, 2)

ここで何が起こっているのでしょうか?なぜPythonは ???? によって参照されるオブジェクトを置き換えるのですか、しかし時々だけですか?その動作はどこに記述されていますか?

どのように解決するのですか?

PEP 3131 -- 非 ASCII 識別子のサポート は言います。

すべての識別子はパース時にNFKCという正規形に変換され、識別子の比較はNFKCに基づいて行われます。

あなたは unicodedata を使用してコンバージョンをテストすることができます。

import unicodedata

unicodedata.normalize('NFKC', '????')
# f

ということになります。 '????' に変換されます。 'f' に変換されます。期待されるに至る。

????  = "Some String"
print(f)
# "Some String"