2009-06-12 4 views
1

Python заполнен небольшими аккуратными ярлыками.Python shortcuts

Например:

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

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

+6

сообщества вики? –

+1

duplicate: http://stackoverflow.com/questions/101268/hidden-features-of-python – SilentGhost

+0

Не дубликат вообще. – sqram

ответ

11
self.data = map(lambda x: list(x), data) 

является dreck - использовать

self.data = map(list, data) 

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

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

+0

Amazing. Спасибо. Это красота рефакторинга в питоне. Просто, когда я подумал, что реорганизовал его как можно проще и короче, я ошибся. :) Еще раз спасибо – sqram

+0

@lyrae, вы очень желанны! -) –

3

Alex Martelli предоставил еще более короткую версию вашего первого примера. Я должен предоставить (немного) сокращенный вариант вашей второй:

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

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

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

+0

Ах спасибо. Не стесняйтесь вносить свой вклад в эту тему, если знаете другие аккуратные ярлыки =] – sqram

3

Я не уверен, если это ярлык, но я люблю его:

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

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

+0

и зачем вам это нужно? не перечисляет решение так же? – SilentGhost

+0

Это позволяет использовать перечислимые константы на языке, который формально не поддерживает их. Для них существует довольно широкий выбор вариантов использования. –

1

Я всегда любил "разархивировать" идиомы:.

>>> 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) 
Смежные вопросы