2009-06-12 204 views
1

Python充滿了小巧的​​快捷鍵。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頻道里,他們說「太多都不知道」。

我認爲我們應該在這裏列出一些,因爲我喜歡使用這些快捷方式來縮短我的代碼& refctor。我相信這會讓很多人受益。

+6

社區維基? – 2009-06-12 05:34:02

+1

重複:http://stackoverflow.com/questions/101268/hidden-features-of-python – SilentGhost 2009-06-12 10:10:14

+0

根本不重複。 – sqram 2009-06-12 10:59:49

回答

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

是dreck - 使用

self.data = map(list, data) 

如果你是一個狂熱的map(列表內涵通常是優選的這些天)。更一般地說,lambda x: somecallable(x)可以總是被高效地更改爲只是somecallable,在上下文,只有很好的效果。

至於一般的快捷方式,我和我的妻子盡我們所能在Python Cookbook第二版的早期部分列出最重要和最有用的一個 - 可能是一個開始。

3

Alex Martelli提供了第一個例子的更短版本。我會提供你的第二個(略)較短的版本:

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

顯然,在運營商變得更有利你的測試更多的價值。

我還想強調,縮短和重構只有在它提高了清晰度和可讀性的程度上纔是好的。 (除非你是代碼高爾夫球。)

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 

(我不知道是誰這個上來了,但那不是我)

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)