0

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 频道中,他们说“太多了,无法全部了解”。

我认为我们应该在这里列出一些,因为我喜欢使用这些快捷方式来缩短和重构我的代码。我相信这会让很多人受益。

4

4 回答 4

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

是dreck——使用

self.data = map(list, data)

如果您是map狂热分子(如今,通常首选列表推导式)。更一般地说,在任何情况下,总是lambda x: somecallable(x)可以有效地更改为 just ,但效果很好。somecallable

至于一般的快捷方式,我和我的妻子尽最大努力在 Python Cookbook 第二版的早期列出了最重要和最有用的一条——可以作为一个开始。

于 2009-06-12T04:45:29.767 回答
3

Alex Martelli 提供了您的第一个示例的更短版本。我将提供您第二个的(稍微)较短的版本:

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

显然,您要测试的值越多, in 运算符就越有利。

我还想强调,缩短和重构只有在提高清晰度和可读性的范围内才是好的。(除非你在打代码。;)

于 2009-06-12T05:24:11.733 回答
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

(我不知道这是谁想出来的,但不是我。)

于 2009-06-12T10:01:58.370 回答
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)
于 2009-06-12T13:26:38.440 回答