题
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
狂热(如今,列表综合通常是首选)。更普遍, lambda x: somecallable(x)
能够 总是 有效地更改为 somecallable
, , 在 每一个 上下文,只有良好的效果。
至于一般的快捷方式,我和我的妻子尽力在Python食谱的第二版的初期列出最重要,最有用的捷径 - 可能是一个开始。
其他提示
Alex Martelli提供了您第一个示例的更短版本。我将提供您的第二个(略短):
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
(我不知道是谁想到的,但不是我。)
我一直喜欢“ 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)
不隶属于 StackOverflow