有人能否说明“²”是一个符号还是一个数字?(alt+1277,2的幂)
print("²".isdigit())
# True
print("²".isnumeric())
# True
因为Python说它是数字,但实际上它并不是数字。我错了吗?还是这是个bug?
这是一个数字,明确地记录在文档中:
str.isdigit()
如果字符串中的所有字符都是数字且至少有一个字符,则返回True,否则返回False。数字包括十进制字符和需要特殊处理的数字,如兼容上标数字。这包括不能用于十进制数字的数字,如Kharosthi数字。形式上,数字是具有属性值Numeric_Type=Digit或Numeric_Type=Decimal的字符。
关于 Numeric_Type,这是由Unicode定义的:
Numeric_Type=Digit
位置十进制字符(Numeric_Type=Decimal)或其序列的变体。这些包括上/下标,通过添加字符(如括号、点或逗号)进行封闭或装饰。
Python聪明地将Unicode字符标记为数字,因为这是可能的。
为了补充这个好答案,请注意,您甚至可以获得字符的浮点表示:
>>> from unicodedata import numeric
>>> numeric("²")
2.0
之所以是浮点数,是因为Unicode版本的1/2、3/2等都有。
(请参见如何将Unicode数字转换为整数?)
int("08")
,并且由于指定了基数(默认为10),它将正确地转换为8。 - Jean-François Fabre
isdigit
和isnumeric
都不意味着由这些值组成的字符串可以用作参数传递给例如int
。如果您想知道字符串s
是否表示特定的int
值,请不要检查s
,而是尝试使用int(s)
并捕获引发的异常。 - chepner