Unterschied zwischen isdecimal und isdigit

8

Die Python 3 Dokumentation für isdigit lautet

  

Geben Sie true zurück, wenn alle Zeichen in der Zeichenfolge Ziffern sind und es sich um um gibt   mindestens ein Zeichen, ansonsten falsch. Ziffern enthalten Dezimalzahlen   Zeichen und Ziffern, die eine besondere Behandlung erfordern, wie z   Kompatibilitäts Hochstellziffern. Formal ist eine Ziffer ein Zeichen   Das hat den Eigenschaftswert Numeric_Type = Digit oder   Numerischer_Typ = Dezimal.

Es klingt also so, als ob isdigit eine Obermenge von isdecimal wäre. Aber dann sagen die Dokumente für isdecimal

  

Geben Sie true zurück, wenn alle Zeichen in der Zeichenfolge Dezimalzeichen sind und   Es gibt mindestens ein Zeichen, ansonsten falsch. Dezimalzeichen   sind solche aus der allgemeinen Kategorie "Nd". Diese Kategorie enthält Ziffern   Zeichen und alle Zeichen, die zur Bildung von Dezimalzeichen verwendet werden können   Zahlen, z.B. U + 0660, ARABIC-INDIC DIGIT ZERO.

Das klingt wie isdecimal sollte eine Obermenge von isdigit sein.

Wie hängen diese Methoden zusammen? Passt einer von ihnen zu einer strengen Obermenge dessen, was der andere dazu passt? Hat die Numeric_Type-Eigenschaft überhaupt etwas mit der Nd-Kategorie zu tun? (Und ist diese widersprüchliche Dokumentation ein Dokumentationsfehler?)

    
user2357112 10.03.2014, 10:39
quelle

3 Antworten

5

Wie ich herausgefunden habe , lautet die Entsprechung zwischen Zeichenfolgenprädikaten, die nach numerischen Werten und Unicode-Zeicheneigenschaften suchen:

%Vor%

z. B. RUN (RUNIC BELGTHOR SYMBOL, U + 16F0) gehört zu Nl , also:

%Vor%     
Mirzhan Irkegulov 06.01.2015 11:34
quelle
3

Die Art und Weise I Abschnitt 4.6 des Unicode 6.0 Standard , die Ziffer Kategorie ist eine Obermenge der Lese Dezimalziffer.

  

Dezimalziffern, wie allgemein verstanden, sind Ziffern, die zur Bildung von Dezimal-Radix-Zahlen verwendet werden. Dazu gehören Skript-spezifische Ziffern, aber ausschließen Zeichen wie römische Ziffern und griechische acrophonic Ziffern, die nicht Dezimal-radix Ausdrücke tun bilden. (Man beachte, dass & lt; 1, 5 & gt;. = 15 = fünfzehn, aber = IV = vier)

     

Der Numeric_Type = dezimal Eigenschaftswert (der mit dem General_Category = Nd Eigenschaftswert korreliert ist) ist auf diese numerischen Zeichen beschränkt, die in Dezimal-Radix-Zahlen verwendet werden und für das eine ganze Reihe von Ziffern hat in einem zusammenhängenden Bereich codiert worden , mit der Reihenfolge der NUMERIC_VALUE aufsteigend und mit der Ziffer Null als ersten Codepunkt im Bereich.

Also würde die dezimale Kategorie Ziffernarten wie römische Ziffern, Brüche usw. ausschließen.

    
tripleee 10.03.2014 10:59
quelle
1

Python 3

Die Python 3-Dokumentation für str.isdecimal wurde anscheinend korrigiert, sodass Dezimalzahlen keine Ziffern mehr enthalten:

str.isdecimal

  

Geben Sie true zurück, wenn alle Zeichen in der Zeichenfolge Dezimalzeichen sind und mindestens ein Zeichen vorhanden ist, andernfalls false. Dezimalzeichen sind solche, die verwendet werden können, um Zahlen in der Basis 10 zu bilden, z. U + 0660, ARABIC-INDIC DIGIT ZERO. Formal ist ein Dezimalzeichen ein Zeichen in der Unicode-Allgemeinkategorie "Nd".

Python 2

Die Python-2-Dokumentation scheint immer noch falsch zu sein (stimmt nicht mit der 2.7.14-Implementierung überein) und gibt konsequent an, dass Dezimalzahlen Ziffern enthalten:

str.isdigit

  

Gibt true zurück, wenn alle Zeichen in der Zeichenfolge Ziffern sind und mindestens ein Zeichen vorhanden ist, andernfalls false.   Bei 8-Bit-Zeichenfolgen ist diese Methode länderabhängig.

unicode.isdecimal

  

Gibt True zurück, wenn nur Dezimalzeichen in S vorhanden sind, andernfalls False. Dezimalzeichen umfassen Ziffernzeichen und alle Zeichen, die zur Bildung von Dezimalzeichen verwendet werden können, z. U + 0660, ARABIC-INDIC DIGIT ZERO.

Ein schneller Test des Zeichens '³' in Python 2.7.14 zeigt, dass Dezimalen nicht Ziffern enthalten:

%Vor%

Zusammenfassung

Python 2 und 3 haben jetzt ein ähnliches Verhalten (Ziffern enthalten Dezimalstellen), die der Python 3-Dokumentation entsprechen, während die Python 2-Dokumentation falsch ist.

    
Ovaflo 21.10.2017 11:25
quelle

Tags und Links