web-dev-qa-db-fra.com

Différence entre unicode.isdigit () et unicode.isnumeric ()

Quelle est la différence entre les méthodes unicode.isdigit () et unicode.isnumeric ()?

20
Pavel Patrin
unicode.isnumeric()

Renvoie True s'il n'y a que des caractères numériques dans S, False sinon. Les caractères numériques incluent les caractères numériques et tous les caractères qui possèdent la propriété de valeur numérique Unicode, par exemple. U + 2155, FRACTION VULGARE UNE CINQUIÈME.

str.isdigit()

Renvoie true si tous les caractères de la chaîne sont des chiffres et s'il y a au moins un caractère, false sinon.

Pour les chaînes de 8 bits, cette méthode dépend des paramètres régionaux.

5
Steve Barnes

De la manuel

La méthode isnumeric () vérifie si la chaîne est composée uniquement de caractères numériques. Cette méthode est présente uniquement sur les objets unicode.

Les chiffres comprennent les caractères décimaux et les chiffres nécessitant un code spécial manipulation, tels que les chiffres en exposant de compatibilité. Formellement, un digit est un caractère qui a la valeur de la propriété Numeric_Type = Digit ou Numeric_Type = Decimal.

2
Rahul Tripathi

À partir de documents intégrés en python,

>>> unicode.isdigit.__doc__
'S.isdigit() -> bool\n\nReturn True if all characters in S are digits\nand there is at least one character in S, False otherwise.'
>>> unicode.isnumeric.__doc__
'S.isnumeric() -> bool\n\nReturn True if there are only numeric characters in S,\nFalse otherwise.'
1
Avinash Raj

L’extrait de code fourni par @Martijn Pieters ne fonctionne pas avec la dernière version de Python, à savoir la version 3.7, au moment de la rédaction de cette réponse.

Voici l'extrait de code mis à jour.

import unicodedata

count = 0
for codepoint in range(2**16):
    ch = chr(codepoint)
    if ch.isnumeric() and not ch.isdigit():
        print(u'{:04x}: {} ({})'.format(codepoint, ch, unicodedata.name(ch, 'UNNAMED')))
        count = count + 1
print(f'Total Number of Numeric and Non-Digit Unicode Characters = {count}')

Sortie:

...
f9d1: 六 (CJK COMPATIBILITY IDEOGRAPH-F9D1)
f9d3: 陸 (CJK COMPATIBILITY IDEOGRAPH-F9D3)
f9fd: 什 (CJK COMPATIBILITY IDEOGRAPH-F9FD)
Total Number of Numeric and Non-Digit Unicode Characters = 335

REMARQUE: j'utilise des chaînes de caractères pour le formatage. C'est une nouvelle méthode de formatage de chaîne très intéressante, introduite dans Python 3.6 sous PEP-498 . C'est aussi appelé Interpolation de chaîne littérale. Vous pouvez en savoir plus à ce sujet ici ou consultez Documentation officielle aussi.

0
Pankaj