1. ホーム
  2. python

[解決済み] Pythonのstr.isdigit, isnumeric, isdecimalの違いは何ですか?

2022-03-03 16:54:49

質問

以下のメソッドを実行すると

s.isdigit()
s.isnumeric()
s.isdecimal()

私はいつも出力として、またはすべて True またはすべて False の各値に対して s (もちろん文字列です)。 この3つの違いは何でしょうか?2つの True と1つの False (またはその逆)ですか?

解決方法は?

主にユニコードの分類についてです。 以下は、矛盾を示すいくつかの例です。

>>> def spam(s):
...     for attr in 'isnumeric', 'isdecimal', 'isdigit':
...         print(attr, getattr(s, attr)())
...         
>>> spam('½')
isnumeric True
isdecimal False
isdigit False
>>> spam('³')
isnumeric True
isdecimal False
isdigit True

具体的な動作は公式ドキュメントに記載 ここで .

すべて検索するスクリプトです。

import sys
import unicodedata
from collections import defaultdict

d = defaultdict(list)
for i in range(sys.maxunicode + 1):
    s = chr(i)
    t = s.isnumeric(), s.isdecimal(), s.isdigit()
    if len(set(t)) == 2:
        try:
            name = unicodedata.name(s)
        except ValueError:
            name = f'codepoint{i}'
        print(s, name)
        d[t].append(s)