02 isdecimal(), isdigit(), isnumeric()

isdecimal()

  • 官方文档截图

  • 简单地说:若字符串中所有字符都是十进制字符,则返回 True,否则返回 False

isdigit()

  • 官方文档截图

  • 简单地说:若字符串中所有字符都是数字字符,则返回 True,否则返回 False

  • 所以,isdigit() 的范围大于 isdecimal()

isnumeric()

  • 官方文档截图

  • 简单地说:若字符串中所有字符都是数字字符,则返回 True,否则返回 False

  • isdecimal(), isdigit() 有区别

对比

isdecimal()
True:  Unicode 数字,全角数字(双字节)
False: 小数,罗马数字,汉字数字
Error: byte 数字(半角、单字节)

isdigit()
True:  Unicode 数字,全角数字(双字节),byte 数字(半角、单字节)
False: 小数,罗马数字,汉字数字
Error: 无

isnumeric()
True:  Unicode 数字,全角数字(双字节),罗马数字,汉字数字
False: 小数
Error: byte 数字(半角、单字节)
  • isdecimal()isdigit() 的区别就在 byte 数字上

    • byte 数字在使用 isdecimal() 时抛出异常
    • byte 数字在使用 isdigit() 时输出 True
  • isdecimal()isnumeric() 的区别就在罗马数字汉字数字

    • 罗马数字和汉字数字在使用 isdecimal() 时输出 False
    • 罗马数字和汉字数字在使用 isnumeric() 时输出 True
  • 另外,对“圈数字”而言

    • False: isdecimal()
    • True: isdigit(), isnumeric()

举例

例1

num1 = '6'  # unicode
num2 = '6'  # 全角
num3 = '6.6'  # 小数
num4 = 'Ⅵ'  # 罗马数字 6
num5 = '六'  # 汉字数字
num6 = b'6'  # byte / 半角

print(num1.isdecimal())  # T unicode
print(num2.isdecimal())  # T 全角
print(num3.isdecimal())  # F 小数
print(num4.isdecimal())  # F 罗马数字
print(num5.isdecimal())  # F 汉字数字
print(num6.isdecimal())  # AttributeError: 'bytes' object has no attribute 'isdecimal'

print(num1.isdigit())  # T unicode
print(num2.isdigit())  # T 全角
print(num3.isdigit())  # F 小数
print(num4.isdigit())  # F 罗马数字
print(num5.isdigit())  # F 汉字数字
print(num6.isdigit())  # T 半角

print(num1.isnumeric())  # T unicode
print(num2.isnumeric())  # T 全角
print(num3.isnumeric())  # F 小数
print(num4.isnumeric())  # T 罗马数字
print(num5.isnumeric())  # T 汉字数字
print(num6.isnumeric())  # AttributeError: 'bytes' object has no attribute 'isnumeric'

例2

>>> "②".isdecimal()
False
>>> "②".isdigit()
True
>>> "②".isnumeric()
True
>>> 
原文地址:https://www.cnblogs.com/yorkyu/p/10270963.html