Str.isdecimal () et str.exemple de différence isdigit()

Lecture de docs python je suis venu à .isdecimal() et .les fonctions de chaîne isdigit() et je ne trouve pas la littérature trop claire sur leur distinction utilisable. Quelqu'un pourrait-il me fournir des exemples de code où ces deux fonctions se différencient?

Comportement Similaire:

>>> str.isdecimal('1')
True
>>> str.isdigit('1')
True

>>> str.isdecimal('1.0')
False
>>> str.isdigit('1.0')
False

>>> str.isdecimal('1/2')
False
>>> str.isdigit('1/2')
False
23
demandé sur Pei 2014-04-01 18:48:47

3 réponses

Il y a des différences , mais elles sont quelque peu rares*. Il surgit principalement avec divers caractères unicode, tels que 2:

>>> c = '\u00B2'
>>> c.isdecimal()
False
>>> c.isdigit()
True

Vous pouvez également aller plus loin dans le trou de lapin prudent-unicode-distinction avec la méthode isnumeric:

>>> c = '\u00BD' # ½
>>> c.isdecimal()
False
>>> c.isdigit()
False
>>> c.isnumeric()
True

*au moins, je n'ai jamais rencontré de code de production qui doit distinguer entre les chaînes qui contiennent différents types de ces situations exceptionnelles, mais des cas d'utilisation existent sûrement quelque part.

23
répondu Henry Keiter 2014-04-01 22:45:08

Voyons quelques exemples:

Str.isdecimal () (nombres décimaux seulement)

34 est-il un nombre décimal? -- >Oui

print("34".isdecimal())  #True

L'Exposant 2 est-il un nombre décimal? --> Pas de

print("\u00B2")
print("\u00B2".isdecimal())  #False

Str.isdigit () (décimales, indices, exposants)

Est 34 un chiffre? -- >Oui

print("34".isdigit()) #True

L'Exposant 2 est-il un chiffre? -- >Oui

print("\u00B2")
print("\u00B2".isdigit()) #True

Str.isnumérique () (chiffres, Fractions vulgaires, indices, Exposants, Chiffres Romains, Numérateurs Monétaires)

34 est-il un nombre numérique? -- >Oui

print("34".isnumeric()) #True

L'Exposant 2 est-il un nombre numérique? -- >Oui

print("\u00B2")
print("\u00B2".isnumeric()) #True

La Fraction vulgaire est-elle un quart numérique? -- >Oui

print("\u00BC")
print("\u00BC".isnumeric()) #True
12
répondu N Randhawa 2016-10-20 14:04:48

Si vous doutez, mon conseil-de coder, de regarder un résultat, de tirer des conclusions.

Un code

In [115]: import itertools
     ...: 
     ...: line = '-' * 37
     ...: print(line)
     ...: print("|    №   | isdigit | isdecimal | chr")
     ...: print(line)
     ...: for number in itertools.chain(range(1000), range(4969, 4978), range(8304, 11000)):
     ...:     char = chr(number)
     ...:     if (char.isdigit() or char.isdecimal()):
     ...:         print('| {0:>6} | {1:^7} | {2:^9} | {3:3} '.format(
     ...:             number,
     ...:             '+' if char.isdigit() else '-',
     ...:             '+' if char.isdecimal() else '-',
     ...:             char
     ...:         )
     ...:     )
     ...: 

Regardez un résultat

-------------------------------------
|    №   | isdigit | isdecimal | chr
-------------------------------------
|     48 |    +    |     +     | 0   
|     49 |    +    |     +     | 1   
|     50 |    +    |     +     | 2   
|     51 |    +    |     +     | 3   
|     52 |    +    |     +     | 4   
|     53 |    +    |     +     | 5   
|     54 |    +    |     +     | 6   
|     55 |    +    |     +     | 7   
|     56 |    +    |     +     | 8   
|     57 |    +    |     +     | 9   
|    178 |    +    |     -     | ²   
|    179 |    +    |     -     | ³   
|    185 |    +    |     -     | ¹   
|   4969 |    +    |     -     | ፩   
|   4970 |    +    |     -     | ፪   
|   4971 |    +    |     -     | ፫   
|   4972 |    +    |     -     | ፬   
|   4973 |    +    |     -     | ፭   
|   4974 |    +    |     -     | ፮   
|   4975 |    +    |     -     | ፯   
|   4976 |    +    |     -     | ፰   
|   4977 |    +    |     -     | ፱   
|   8304 |    +    |     -     | ⁰   
|   8308 |    +    |     -     | ⁴   
|   8309 |    +    |     -     | ⁵   
|   8310 |    +    |     -     | ⁶   
|   8311 |    +    |     -     | ⁷   
|   8312 |    +    |     -     | ⁸   
|   8313 |    +    |     -     | ⁹   
|   8320 |    +    |     -     | ₀   
|   8321 |    +    |     -     | ₁   
|   8322 |    +    |     -     | ₂   
|   8323 |    +    |     -     | ₃   
|   8324 |    +    |     -     | ₄   
|   8325 |    +    |     -     | ₅   
|   8326 |    +    |     -     | ₆   
|   8327 |    +    |     -     | ₇   
|   8328 |    +    |     -     | ₈   
|   8329 |    +    |     -     | ₉   
|   9312 |    +    |     -     | ①   
|   9313 |    +    |     -     | ②   
|   9314 |    +    |     -     | ③   
|   9315 |    +    |     -     | ④   
|   9316 |    +    |     -     | ⑤   
|   9317 |    +    |     -     | ⑥   
|   9318 |    +    |     -     | ⑦   
|   9319 |    +    |     -     | ⑧   
|   9320 |    +    |     -     | ⑨   
|   9332 |    +    |     -     | ⑴   
|   9333 |    +    |     -     | ⑵   
|   9334 |    +    |     -     | ⑶   
|   9335 |    +    |     -     | ⑷   
|   9336 |    +    |     -     | ⑸   
|   9337 |    +    |     -     | ⑹   
|   9338 |    +    |     -     | ⑺   
|   9339 |    +    |     -     | ⑻   
|   9340 |    +    |     -     | ⑼   
|   9352 |    +    |     -     | ⒈   
|   9353 |    +    |     -     | ⒉   
|   9354 |    +    |     -     | ⒊   
|   9355 |    +    |     -     | ⒋   
|   9356 |    +    |     -     | ⒌   
|   9357 |    +    |     -     | ⒍   
|   9358 |    +    |     -     | ⒎   
|   9359 |    +    |     -     | ⒏   
|   9360 |    +    |     -     | ⒐   
|   9450 |    +    |     -     | ⓪   
|   9461 |    +    |     -     | ⓵   
|   9462 |    +    |     -     | ⓶   
|   9463 |    +    |     -     | ⓷   
|   9464 |    +    |     -     | ⓸   
|   9465 |    +    |     -     | ⓹   
|   9466 |    +    |     -     | ⓺   
|   9467 |    +    |     -     | ⓻   
|   9468 |    +    |     -     | ⓼   
|   9469 |    +    |     -     | ⓽   
|   9471 |    +    |     -     | ⓿   
|  10102 |    +    |     -     | ❶   
|  10103 |    +    |     -     | ❷   
|  10104 |    +    |     -     | ❸   
|  10105 |    +    |     -     | ❹   
|  10106 |    +    |     -     | ❺   
|  10107 |    +    |     -     | ❻   
|  10108 |    +    |     -     | ❼   
|  10109 |    +    |     -     | ❽   
|  10110 |    +    |     -     | ❾   
|  10112 |    +    |     -     | ➀   
|  10113 |    +    |     -     | ➁   
|  10114 |    +    |     -     | ➂   
|  10115 |    +    |     -     | ➃   
|  10116 |    +    |     -     | ➄   
|  10117 |    +    |     -     | ➅   
|  10118 |    +    |     -     | ➆   
|  10119 |    +    |     -     | ➇   
|  10120 |    +    |     -     | ➈   
|  10122 |    +    |     -     | ➊   
|  10123 |    +    |     -     | ➋   
|  10124 |    +    |     -     | ➌   
|  10125 |    +    |     -     | ➍   
|  10126 |    +    |     -     | ➎   
|  10127 |    +    |     -     | ➏   
|  10128 |    +    |     -     | ➐   
|  10129 |    +    |     -     | ➑   
|  10130 |    +    |     -     | ➒

Tirer une conclusion

Comme vous pouvez le voir, principale différence entre la fonction str.isdecimal() et str.isdigit () est que: la fonction str.isdecimal () retourne True uniquement pour les nombres de 0 à 9, en même temps la fonction str.isdigit () renvoie True pour d'autres caractères pris en charge par unicode.

5
répondu Seti Volkylany 2017-02-15 13:37:22