当我运行这些方法时
s.isdigit() s.isnumeric() s.isdecimal()
对于s的每个值(当然是字符串),我总是得到输出,或者全部为True,或者全部为False。两者之间有什么区别?您能否提供一个给出两个对错一个(反之亦然)的示例?
主要是关于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)