La lectura de python docs he venido .isdecimal() y .isdigit() las funciones de cadena y no estoy encontrando la literatura demasiado claro en sus utilizable distinción. Podría alguien facilitarme el código de ejemplos en los que estas dos funciones se diferencian por favor.

Comportamiento Similar:

>>> 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
InformationsquelleAutor Phoenix | 2014-04-01

3 Comentarios

  1. 31

    No son diferencias, pero son un poco raros,*. Principalmente los cultivos con diferentes caracteres unicode, tales como 2:

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

    También se puede ir más abajo en el cuidado de unicode-distinción agujero del conejo con el isnumeric método:

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

    *Por lo menos, nunca he encontrado el código de producción que necesita distinguir entre las cadenas que contienen diferentes tipos de estas situaciones excepcionales, pero sin duda los casos de uso de existir en algún lugar.

    • No todos los que raro.
    • ¿Qué es un común ejemplo donde isdecimal y isdigit diferencian? Nunca he usado isdecimal y la mayoría de los números que yo uso volvería True para ambos.
    • Sólo puedo encontrar 128 caracteres de 1114112 para que c.isdigit() != c.isdecimal(). Eso es bastante raro.
    • Está bien, si se va a poner de esa manera.. Alguna razón por la que has eliminado tu respuesta, por cierto?
    • Cuando usted encuentra uno, se encontró a un grupo entero; U+00B2, U+00B3, U+00B9 es más una excepción; la mayoría de los partidos vienen en continuo de punto de código de grupos.
    • hay otra manera de verlo: ~20% de «isdigit ()», los personajes no son «isdecimal ()» ( (678-550)/678unicodedata.unidata_version == '8.0.0' ), es decir, dado un decimal, hay un 20% de probabilidades de que se trata de un decimal, pero en tipográfico contexto (c.isdigit() and not c.isdecimal()) – no es que raro. También, hay sólo 1514 caracteres con un valor numérico.

  2. 14

    Vamos a ver algunos ejemplos:

    str.isdecimal() (Sólo Números Decimales)

    Es de 34 un número decimal? –> Sí

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

    Superíndice 2 un número decimal? –> No

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

    str.isdigit() (Decimales, Subíndices, Superíndices)

    Es de 34 un dígito? –> Sí

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

    Superíndice 2 un dígito? –> Sí

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

    str.isnumeric() (Dígitos, Vulgar Fracciones, Subíndices, Superíndices, Números Romanos, Moneda Numeradores)

    Es de 34 un número numérico? –> Sí

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

    Superíndice 2 un número numérico? –> Sí

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

    Es Vulgar Fracción un Cuarto numérico numérico? –>Sí

    print("\u00BC")
    print("\u00BC".isnumeric()) #True
  3. 8

    Si usted duda, mi consejo – a del código, a ver los resultados, sacar conclusiones.

    Un código

    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
         ...:         )
         ...:     )
         ...: 

    Mirar los resultados de la

    -------------------------------------
    |       | 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 |    +    |     -     | 

    Dibujar una de las conclusiones

    Como puede ver, la principal diferencia entre la función str.isdecimal() y str.isdigit() es que: la función str.isdecimal() devolver True sólo para los números de 0 a 9, al mismo tiempo, la función de str.isdigit() devolver True para algunos otros unicode admite caracteres.

    • La conclusión carece de una advertencia importante: isdecimal() devuelve True para números decimales en varios caracteres de los sistemas de. Ejemplo: «๑».isdecimal() devuelve True (Carácter Unicode ‘THAI DÍGITO UNO’ (U+0E51)).

Dejar respuesta

Please enter your comment!
Please enter your name here