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?)
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:
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.
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".
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%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.