Вопрос

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top