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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top