[pyar] "Hola mundo"[-27:27] vs "Errors should never pass silently."

Matías Bellone matiasbellone en gmail.com
Sab Abr 13 19:01:08 ART 2013


2013/4/13 Martin Volpe <martin.volpe en gmail.com>:
> Hola lista,
>
> In [1]: "Hola mundo"[-27:27]
> Out[1]: 'Hola mundo'
>
>
> Vi este caso de slice y me llamó mucho la atención, a mi criterio viola de
> forma evidente el zen de Python, debería tirar un IndexError, pero no lo
> hace.
>
> ¿Por que esto se diseñó así? ¿En que caso esto es más cómodo que un
> traceback?
> ¿Alguień se olvido de poner un "pero" en el zen :P?

Es acorde a la forma más simple de para definir un slice. Según la
documentación de python [1], en la sección de operaciones comunes
sobre tipos de secuencia, la nota 3 dice:

«If i or j is negative, the index is relative to the end of the
string: len(s) + i or len(s) + j is substituted. But note that -0 is
still 0.»

Además, la nota 4 dice:

«The slice of s from i to j is defined as the sequence of items with
index k such that i <= k < j. If i or j is greater than len(s),
uselen(s). If i is omitted or None, use 0. If j is omitted or None,
use len(s). If i is greater than or equal to j, the slice is empty.»

[1] http://docs.python.org/3.3/library/stdtypes.html#common-sequence-operations

Por lo que tu [-27:27] dice: «empezá desde el caracter número 27
empezando a contar desde el final de la cadena y dame todo lo que haya
desde ahí hasta el caracter número 27 empezando a contar desde el
principio». Según la fórmula, si tu cadena es S, S[-27:27] es la
secuencia de todos los elementos de S con índice K tal que: len(S) -
27 <= K < 27.

Dado que tu cadena son menos de 27 caracteres, eso incluye la cadena completa.

Saludos,
Toote
--
Web: http://www.clubjuegosdemesa.com.ar



More information about the pyar mailing list