Pregunta
Python está lleno de pequeños atajos ordenadas.
Por ejemplo:
self.data = map(lambda x: list(x), data)
y (aunque no tan bonito)
tuple(t[0] for t in self.result if t[0] != 'mysql' and t[0] != 'information_schema')
entre muchos otros.
En el canal de IRC, dijeron "demasiados para conocerlos a todos".
Creo que hay que enumerar algunas aquí, como me encanta el uso de estos atajos para acortar y refctor mi código. Estoy seguro de que esto beneficiaría a muchos.
Solución
self.data = map(lambda x: list(x), data)
es dreck - utilizar
self.data = map(list, data)
Si eres un fanático de map
(listas por comprensión se prefieren por lo general en estos días). De manera más general, puede lambda x: somecallable(x)
siempre puede cambiar de forma productiva a solo somecallable
, en cada contexto, con nada más que un buen efecto.
En cuanto a los accesos directos en general, mi esposa y yo hicimos nuestro mejor esfuerzo para enumerar el más importante y útil en la primera parte de la segunda edición del libro de cocina de Python -. Podría ser un comienzo
Otros consejos
Alex Martelli proporciona una versión aún más corto del primer ejemplo. I presentará una versión (ligeramente) más corto del segundo:
tuple(t[0] for t in self.result if t[0] not in ('mysql', 'information_schema'))
Es evidente que la convierte en el operador más ventajosa, los más valores que se prueba para.
También me gustaría hacer hincapié en que el acortamiento y la refactorización es buena sólo en la medida en que mejora la claridad y legibilidad. (A menos que sea de código de golf;).
No estoy seguro si esto es un atajo, pero me encanta:
>>> class Enum(object):
def __init__(self, *keys):
self.keys = keys
self.__dict__.update(zip(keys, range(len(keys))))
def value(self, key):
return self.keys.index(key)
>>> colors = Enum("Red", "Blue", "Green", "Yellow", "Purple")
>>> colors.keys
('Red', 'Blue', 'Green', 'Yellow', 'Purple')
>>> colors.Green
2
(No sé quién se le ocurrió esto, pero no era yo.)
Siempre me ha gustado el "descomprimir" idioma:
>>> zipped = [('a', 1), ('b', 2), ('c', 3)]
>>> zip(*zipped)
[('a', 'b', 'c'), (1, 2, 3)]
>>>
>>> l,n = zip(*zipped)
>>> l
('a', 'b', 'c')
>>> n
(1, 2, 3)