码迷,mamicode.com
首页 > 编程语言 > 详细

[Python3 填坑] 002 isdecimal() 与 isdigit() 的区别 + isnumeric() 的补充

时间:2019-01-15 14:05:16      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:十进制   ros   图片   ror   att   包括   运行   字符串   tee   

目录


1. print( 坑的信息 )

  • 挖坑时间:2019/01/14

  • 明细

    坑的编码 内容
    Py009-2 Python3 中 isdecimal() 和 isdigit() 的区别



2. isdecimal() 官方文档

  • 截图:
    技术分享图片

  • 大致意思:

如果字符串中的所有字符都是十进制字符并且至少有一个字符,则返回 True,否则返回 False。

十进制字符是可以用来组成以 10 为基数的数字的字符,例如 U+0660:阿拉伯-印度数字零。

形式上,十进制字符是 Unicode 通用类别 ·nd· 中的字符。

  • U+0030:数字零; U+0660:阿拉伯-印度数字零
  • nd:数字,十进制

3. isdigit() 官方文档

  • 截图:
    技术分享图片

  • 大致意思:

如果字符串中的所有字符都是数字并且至少有一个字符,则返回 True,否则返回 False。

数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字。

这包括不能用于以 10 为基数构成数字的数字,如 Kharosthi 数字。

从形式上讲,数字是一个具有属性值 numeric_type=digitnumeric_type=decimal 的字符。

  • kharosthi 编码在 unicode 范围 U+10a00 – U+10a5f

4. 举例

(1) 先说结论

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

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

  • 所以 isdecimal() 与 isdigit() 的区别就在 byte 数字上
    • byte 数字在使用 isdecimal() 时报错
    • byte 数字在使用 isdigit() 时输出 True

(2) 示例

# 例1 isdecimal()

num1 = ‘6‘              # unicode
num2 = ‘6‘              # 全角
num3 = ‘6.6‘            # 小数
num4 = ‘Ⅵ‘              # 罗马数字 6
num5 = ‘六‘              # 简体汉字 小写数字
num6 = ‘陆‘              # 简体汉字 大写数字
num7 = b‘6‘             # byte

print(num1.isdecimal())
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())
print(num5.isdecimal())
print(num6.isdecimal())
print(num7.isdecimal())
  • 运行结果

True

True

False

False

False

False

AttributeError……‘bytes‘ object has no attribute ‘isdecimal‘

最后一条代码报错:‘bytes‘ 对象没有 ‘isdecimal‘ 属性。


# 例2 isdigit()

num1 = ‘6‘              # unicode
num2 = ‘6‘              # 全角
num3 = ‘6.6‘            # 小数
num4 = ‘Ⅵ‘              # 罗马数字 6
num5 = ‘六‘              # 简体汉字 小写数字
num6 = ‘陆‘              # 简体汉字 大写数字
num7 = b‘6‘             # byte

print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())
print(num5.isdigit())
print(num6.isdigit())
print(num7.isdigit())
  • 运行结果

True

True

False

False

False

False

True


5. 补充 isnumeric()

(1) 官方文档

  • 截图:
    技术分享图片

  • 大致意思:

如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回 True,否则返回 False。

数字字符除了包括数字字符,还有具有 Unicode 数值属性的所有字符,例如 U+2155:VULGAR FRACTION ONE FIFTH。

从形式上讲,数字字符是具有属性值 numeric_type=digitnumeric_type=decimalnumeric_type=numeric 的字符。

VULGAR FRACTION ONE FIFTH,大概写 HTML 时有用,这里就不挖二重坑了。


(2) 先说结论

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

  • isnumeric() 与 isdecimal() 的区别就在罗马数字和汉字数字上
    • 罗马数字和汉字数字在使用 isnumeric() 时输出 True
    • 罗马数字和汉字数字在使用 isdecimal() 时输出 False

(3) 举例说明

# 例3 isnumeric()

num1 = ‘6‘              # unicode
num2 = ‘6‘              # 全角
num3 = ‘6.6‘            # 小数
num4 = ‘Ⅵ‘              # 罗马数字 6
num5 = ‘六‘              # 简体汉字 小写数字
num6 = ‘陆‘              # 简体汉字 大写数字
num7 = b‘6‘             # byte

print(num1.isnumeric())
print(num2.isnumeric())
print(num3.isnumeric())
print(num4.isnumeric())
print(num5.isnumeric())
print(num6.isnumeric())
print(num7.isnumeric())
  • 运行结果

True

True

False

True

True

True

AttributeError……‘bytes‘ object has no attribute ‘isnumeric‘

最后一条代码报错:‘bytes‘ 对象没有 ‘isnumeric‘ 属性。

[Python3 填坑] 002 isdecimal() 与 isdigit() 的区别 + isnumeric() 的补充

标签:十进制   ros   图片   ror   att   包括   运行   字符串   tee   

原文地址:https://www.cnblogs.com/yorkyu/p/10270963.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!