小编典典

python中的str.isdigit,isnumeric和isdecimal有什么区别?

python

当我运行这些方法时

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

对于s的每个值(当然是字符串),我总是得到输出,或者全部为True,或者全部为False。两者之间有什么区别?您能否提供一个给出两个对错一个(反之亦然)的示例?


阅读 232

收藏
2020-12-20

共1个答案

小编典典

主要是关于unicode分类。以下是一些显示差异的示例:

>>> 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)
2020-12-20