Вопрос
Python заполнен небольшими аккуратными ярлыками.
Например:
self.data = map(lambda x: list(x), data)
и (хотя не так красиво)
tuple(t[0] for t in self.result if t[0] != 'mysql' and t[0] != 'information_schema')
среди бесчисленных других.
В канале IRC они сказали «слишком много, чтобы узнать их всех».
Я думаю, что мы должны перечислить некоторые здесь, так как я люблю использовать эти ярлыки, чтобы сократить и зарекомендовать мой код. Я уверен, что это принесет пользу многим.
Решение
self.data = map(lambda x: list(x), data)
это Dreck - используйте
self.data = map(list, data)
Если ты map
Fanatic (понимание списка, как правило, предпочтительнее в наши дни). В более общем смысле, lambda x: somecallable(x)
Можно всегда быть продуктивно измененным на просто somecallable
, в каждый Контекст, не имея ничего, кроме хорошего эффекта.
Что касается ярлыков в целом, то мы с женой сделали все возможное, чтобы перечислить самый важный и полезный в начале второго издания Python Cookbook - может стать началом.
Другие советы
Алекс Мартелли предоставил еще более короткую версию вашего первого примера. Я предоставлю (немного) более короткую версию вашего второго:
tuple(t[0] for t in self.result if t[0] not in ('mysql', 'information_schema'))
Очевидно, что оператор становится все более выгодным, чем больше значений вы тестируете.
Я также хотел бы подчеркнуть, что укорочение и рефакторинг хороши только в той степени, в которой это улучшает ясность и читаемость. (Если вы не работаете в коде.;)
Я не уверен, что это ярлык, но мне это нравится:
>>> 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
(Я не знаю, кто это придумал, но это был не я.)
Мне всегда нравилась идиома «распах»:
>>> 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)