2009-06-12 184 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)