Question

Python is filled with little neat shortcuts.

For example:

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

and (although not so pretty)

tuple(t[0] for t in self.result if t[0] != 'mysql' and t[0] != 'information_schema')

among countless others.

In the irc channel, they said "too many to know them all".

I think we should list some here, as i love using these shortcuts to shorten & refctor my code. I'm sure this would benefit many.

Was it helpful?

Solution

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

is dreck -- use

self.data = map(list, data)

if you're a map fanatic (list comprehensions are generally preferred these days). More generally, lambda x: somecallable(x) can always be productively changed to just somecallable, in every context, with nothing but good effect.

As for shortcuts in general, my wife and I did our best to list the most important and useful one in the early part of the Python Cookbook's second edition -- could be a start.

OTHER TIPS

Alex Martelli provided an even shorter version of your first example. I shall provide a (slightly) shorter version of your second:

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

Obviously the in operator becomes more advantageous the more values you're testing for.

I would also like to stress that shortening and refactoring is good only to the extent that it improves clarity and readability. (Unless you are code-golfing. ;)

I'm not sure if this is a shortcut, but I love it:

>>> 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

(I don't know who came up with this, but it wasn't me.)

I always liked the "unzip" idiom:

>>> 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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top