He aquí todos los cambios del núcleo de Python en su versión 2.4.
from module import names
(PEP 328).
>>> 'www.python.org'.split('.', 1) ['www', 'python.org'] 'www.python.org'.rsplit('.', 1) ['www.python', 'org']
En el caso del parámetro cmp, el valor debe ser una función de comparación que tome dos parámetros y devuelva -1, 0 o +1 dependiendo del resultado de comparar los parámetros. Esta función es el criterio que se utilizará para ordenar la lista. Antes, éste era el único parámetro que se podía proporcionar a sort().
key (clave) debe ser una función de un solo parámetro que tome un elemento de la lista y devuelva una clave de comparación para el elemento. Esta lista se ordena entonces usando las claves de comparación. El siguiente ejemplo ordena una lista sin tener en cuenta las mayúsculas y las minúsculas:
>>> L = ['A', 'b', 'c', 'D'] >>> L.sort() # Ordenación, mayúsculas primero >>> L ['A', 'D', 'b', 'c'] >>> # Uso del parámetro 'key' para ordenar la lista >>> L.sort(key=lambda x: x.lower()) >>> L ['A', 'b', 'c', 'D'] >>> # A la antigua >>> L.sort(cmp=lambda x,y: cmp(x.lower(), y.lower())) >>> L ['A', 'b', 'c', 'D']
Este último ejemplo, que usa el parámetro cmp, es el antiguo método de realizar una ordenación sin tener en cuenta mayúsculas. Funciona, pero es más lento que utilizar un parámetro key. Al usar key se llama al método lower() una vez por elemento de la lista, mientras que si se usa cmp, se llamará dos veces por comparación. En resumen, al usar key ahorra llamadas al método lower().
En el caso de las funciones de clave y comparación simples, suele poderse evitar una expresión lambda utilizando un método sin enlazar en su lugar. Por ejemplo, la ordenación anterior tiene una mejor escritura de este modo:
>>> L.sort(key=str.lower) >>> L ['A', 'b', 'c', 'D']
Por último, el parámetro reverse toma un valor booleano. Si
el valor es verdadero, la lista se ordenará en orden inverso. En
lugar de L.sort() ; L.reverse()
, ahora se puede escribir
L.sort(reverse=True)
.
Ahora se garantiza que los resultados de la ordenación son estables. Esto significa que los elementos con claves de ordenación iguales se devolverán en el mismo orden de entrada. Por ejemplo, se puede ordenar una lista por nombre y luego por edad. El resultado estará ordenado edad, y dentro de la misma edad ordenado por nombre.
(Todos los cambios de sort() contribución de Raymond Hettinger.)
>>> L = [9,7,8,3,2,4,1,6,5] >>> [10+i for i in sorted(L)] # utilizable en una lista autodefinida [11, 12, 13, 14, 15, 16, 17, 18, 19] >>> L # No se modifica el original [9,7,8,3,2,4,1,6,5] >>> sorted('Monty Python') # cualquier iterable puede ser una entrada [' ', 'M', 'P', 'h', 'n', 'n', 'o', 'o', 't', 't', 'y', 'y'] >>> # Enumerar el contenido de un dict ordenado por el valor de sus claves >>> mapa_colores = dict(rojo=1, azul=2, verde=3, negro=4, amarillo=5) >>> for k, v in sorted(mapa_colores.iteritems()): ... print k, v ... negro 4 azul 2 verde 3 rojo 1 amarillo 5
(Contribución de Raymond Hettinger.)
sys.path
y ejecuta el módulo como guion. Por ejemplo, se puede ejecutar el
perfilador de Python con python -m profile
.
(Contribución de Nick Coghlan.)
>>> def transponer(matriz): ... return zip(*matriz) ... >>> transponer([(1,2,3), (4,5,6)]) [(1, 4), (2, 5), (3, 6)] >>> transponer([]) []
sys.modules
.
El objeto módulo incompleto estropeaba nuevas importaciones
del mismo módulo, llevando a confusión.
(Arreglo de Tim Peters.)
LIST_APPEND
, que simplifica
el ``bytecode'' generado para las listas autodefinidas y aumenta su
velocidad en 1/3.
(Contribución de Raymond Hettinger.)
s = s +
"bla"
y s += "bla"
se realizan de una manera más eficaz
en ciertas condiciones. Esta optimización aún no estará presente en
otras implementaciones, como en Jython, por lo que no conviene
fiarse de esto; aún se recomienda el uso del método join()
de las cadenas cuando se desee empalmar una gran cantidad de cadenas.
(Contribución de Armin Rigo.)
El resultado neto de las optimizaciones es que Python 2.4 ejecuta el banco de pruebas pystone alrededor de 5% más rápido que 2.3 y 35% más rápido que Python 2.2 (pystone no es un banco de pruebas especialmente bueno, pero es el más utilizado para medir el rendimiento de Python. Las aplicaciones concretas pueden beneficiarse en mayor o menor grado de Python 2.4).
Consultar en Acerca de este documento... información para sugerir cambios.