use*_*026 43 python string python-3.x
当我运行这些方法时
s.isdigit()
s.isnumeric()
s.isdecimal()
Run Code Online (Sandbox Code Playgroud)
我总是得到输出或全部为True,或者每个s的值都为False(当然是一个字符串).这三者有什么区别?你能提供一个给出两个真实和一个假(或反之亦然)的例子吗?
wim*_*wim 45
它主要是关于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
Run Code Online (Sandbox Code Playgroud)
具体行为在这里的官方文档中.
找到所有这些的脚本:
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)
Run Code Online (Sandbox Code Playgroud)
Chr*_*ean 27
Python文档说明了这三种方法之间的区别.
str.isdigit如果字符串中的所有字符都是数字并且至少有一个字符,则返回true,否则返回false.数字包括十进制字符和需要特殊处理的数字,例如兼容性上标数字.这包括不能用于在基数10中形成数字的数字,如Kharosthi数字.形式上,数字是具有属性值Numeric_Type = Digit或Numeric_Type = Decimal的字符.
str.isnumeric如果字符串中的所有字符都是数字字符,则返回true,并且至少有一个字符,否则返回false.数字字符包括数字字符,以及具有Unicode数值属性的所有字符,例如U + 2155,VULGAR FRACTION ONE FIFTH.形式上,数字字符是具有属性值Numeric_Type = Digit,Numeric_Type = Decimal或Numeric_Type = Numeric的字符.
str.isdecimal如果字符串中的所有字符都是十进制字符并且至少有一个字符,则返回true,否则返回false.十进制字符是可用于在基数10中形成数字的字符,例如U + 0660,ARABIC-INDIC DIGIT ZERO.正则小数字符是Unicode常规类别"Nd"中的字符.
就像@Wim所说,这三种方法的主要区别在于它们处理特定unicode字符的方式.
Ann*_*wan 12
根据定义,isdecimal()?isdigit()?isnumeric()。也就是说,如果字符串是decimal,那么它也将是digit和numeric。
因此,给定一个字符串s并使用这三种方法对其进行测试,结果将只有4种。
+-------------+-----------+-------------+----------------------------------+
| isdecimal() | isdigit() | isnumeric() | Example |
+-------------+-----------+-------------+----------------------------------+
| True | True | True | "038", "???", "???" |
| False | True | True | "?³?", "??", "???" |
| False | False | True | "???", "???", "???", "???" |
| False | False | False | "abc", "38.0", "-38" |
+-------------+-----------+-------------+----------------------------------+
Run Code Online (Sandbox Code Playgroud)
1.一些字符示例 isdecimal()==True
(因此isdigit()==True和isnumeric()==True)
"0123456789" DIGIT ZERO~NINE
"??????????" ARABIC-INDIC DIGIT ZERO~NINE
"??????????" DEVANAGARI DIGIT ZERO~NINE
"??????????" BENGALI DIGIT ZERO~NINE
"??????????" GURMUKHI DIGIT ZERO~NINE
"??????????" GUJARATI DIGIT ZERO~NINE
"??????????" ORIYA DIGIT ZERO~NINE
"??????????" TAMIL DIGIT ZERO~NINE
"??????????" TELUGU DIGIT ZERO~NINE
"??????????" KANNADA DIGIT ZERO~NINE
"??????????" MALAYALAM DIGIT ZERO~NINE
"??????????" THAI DIGIT ZERO~NINE
"??????????" LAO DIGIT ZERO~NINE
"??????????" TIBETAN DIGIT ZERO~NINE
"??????????" MYANMAR DIGIT ZERO~NINE
"??????????" KHMER DIGIT ZERO~NINE
"??????????" FULLWIDTH DIGIT ZERO~NINE
"" MATHEMATICAL BOLD DIGIT ZERO~NINE
"" MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO~NINE
"" MATHEMATICAL SANS-SERIF DIGIT ZERO~NINE
"" MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO~NINE
"" MATHEMATICAL MONOSPACE DIGIT ZERO~NINE
Run Code Online (Sandbox Code Playgroud)
2.一些字符的例子,isdecimal()==False但是isdigit()==True
(因此isnumeric()==True)
"?¹²³??????" SUPERSCRIPT ZERO~NINE
"??????????" SUBSCRIPT ZERO~NINE
"?????????" DIGIT ZERO~NINE FULL STOP
"" DIGIT ZERO~NINE COMMA
"??????????" CIRCLED DIGIT ZERO~NINE
"??????????" NEGATIVE CIRCLED DIGIT ZERO~NINE
"?????????" PARENTHESIZED DIGIT ONE~NINE
"?????????" DINGBAT CIRCLED SANS-SERIF DIGIT ONE~NINE
"?????????" DOUBLE CIRCLED DIGIT ONE~NINE
"?????????" DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE~NINE
"?????????" ETHIOPIC DIGIT ONE~NINE
Run Code Online (Sandbox Code Playgroud)
3.人物的一些例子isdecimal()==False和isdigit()==False,但isnumeric()==True
"½?¼???????¾?????????" VULGAR FRACTION
"??????" BENGALI CURRENCY NUMERATOR
"???" TAMIL NUMBER TEN, ONE HUNDRED, ONE THOUSAND
"???????" TELUGU FRACTION DIGIT
"??????" MALAYALAM NUMBER, MALAYALAM FRACTION
"??????????" TIBETAN DIGIT HALF ZERO~NINE
"???????????" ETHIOPIC NUMBER TEN~NINETY, HUNDRED, TEN THOUSAND
"??????????" KHMER SYMBOL LEK ATTAK
"????????????????" ROMAN NUMERAL
"????????????????" SMALL ROMAN NUMERAL
"?????" ROMAN NUMERAL
"?????????????????????????????????????????" CIRCLED NUMBER TEN~FIFTY
"????????" CIRCLED NUMBER TEN~EIGHTY ON BLACK SQUARE
"???????????" PARENTHESIZED NUMBER TEN~TWENTY
"???????????" NUMBER TEN~TWENTY FULL STOP
"??????????" NEGATIVE CIRCLED NUMBER ELEVEN
"????" various styles of CIRCLED NUMBER TEN
"" DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
"?" IDEOGRAPHIC NUMBER ZERO
"????????????" HANGZHOU NUMERAL ONE~TEN, TWENTY, THIRTY
"????" IDEOGRAPHIC ANNOTATION ONE~FOUR MARK
"??????????" PARENTHESIZED IDEOGRAPH ONE~TEN
"??????????" CIRCLED IDEOGRAPH ONE~TEN
"?????????????????????????????????????????????????" CJK UNIFIED IDEOGRAPH
"???????" CJK COMPATIBILITY IDEOGRAPH
"" AEGEAN NUMBER ONE~NINE, TEN~NINETY
"" AEGEAN NUMBER ONE~NINE HUNDRED, ONE~NINE THOUSAND
"" AEGEAN NUMBER TEN~NINETY THOUSAND
"" GREEK ACROPHONIC ATTIC
"" COUNTING ROD UNIT DIGIT ONE~NINE
"" COUNTING ROD TENS DIGIT ONE~NINE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22784 次 |
| 最近记录: |