Ярлыки Python - PullRequest
       17

Ярлыки Python

1 голос
/ 12 июня 2009

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 они сказали "слишком много, чтобы знать их всех".

Я думаю, что мы должны перечислить некоторые здесь, так как я люблю использовать эти ярлыки, чтобы сократить и изменить мой код. Я уверен, что это принесет пользу многим.

Ответы [ 4 ]

11 голосов
/ 12 июня 2009
self.data = map(lambda x: list(x), data)

Ужасно - используйте

self.data = map(list, data)

, если вы map фанатик (в наши дни предпочтение отдается спискам). В более общем смысле, lambda x: somecallable(x) может всегда быть продуктивно изменен на просто somecallable, в каждый контекст, без единого хорошего эффекта.

Что касается ярлыков в целом, мы с женой сделали все возможное, чтобы перечислить самый важный и полезный в первой части второго издания Python Cookbook - это может быть началом.

3 голосов
/ 12 июня 2009

Я не уверен, что это ярлык, но мне это нравится:

>>> 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

(я не знаю, кто это придумал, но это был не я.)

3 голосов
/ 12 июня 2009

Алекс Мартелли предоставил еще более короткую версию вашего первого примера. Я предоставлю (немного) более короткую версию вашего второго:

tuple(t[0] for t in self.result if t[0] not in ('mysql', 'information_schema'))

Очевидно, что оператор in становится более выгодным, чем больше значений вы проверяете.

Я также хотел бы подчеркнуть, что сокращение и рефакторинг полезны только в той степени, в которой они улучшают ясность и читаемость. (Если вы не играете в коде.;)

1 голос
/ 12 июня 2009

Мне всегда нравилась идиома "unzip":

>>> 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)
...