27 comments

[ 3.3 ms ] story [ 63.8 ms ] thread
Not a very helpful article. Far from a general "improve your Python productivty", it's more like "here are some minor random Python features that I think are useful".

TLDR:

* Use dict and set comprehensions.

* Use collections.Counter.

* Use json.dumps or the pprint module for pretty printing.

* Create simple web services with Python's XML-RPC library.

* Use open source libraries...

yep, my sentiments exactly. nothing at all having to do with productivity.
tl;dr: know the stdlib and the ecosystem well.
As we move toward languages with big standard libraries, productivity becomes more and more about knowing what you don't have to do yourself.

Case in point - even as a Python veteran, I've never seen/used collections.Counter before. It'll save me from writing the same stupid three lines over and over, and is probably implemented faster than I naively do. I'd say that this will improve my productivity.

Could not agree with you more. The more advanced I become with a language, the more I like to go back to even basic docs and read the small-print fancy uses for built-ins. This article touches on a number of them, and it's tricks like this that help you write better code (when used responsibly, of course).
Usually collections.defaultdict is faster than collections.Counter. But the latter is more concise to use.
The biggest problem is having to use old LTS distros in production that only have python 2.6 for example. I'm glad that most LTS versions are soon to be using python 2.7.

I know 2.7 has been around for a long time, but so much production software is running on RHEL/Centos systems with 2.6.

As someone just said on reddt #4 reminds me of python -m SimpleHTTPServer. Very useful, even when you are not coding in Python!
#3 is also usable from the shell in a similar way:

    echo '{"foo":1, "bar":[1,2,3]}' | python -m json.tool
Whitespace as syntax? Really?
Have you never seen python before?
Let's call it canonical offside rule.
Flashnews:mostmodernlanguagesdoindeedusewhitespaceassyntax.
It's more likely than you think.
Despite the negative comments here, it's always good to be reminded of some of nice built-in things. Reminds me how awesome pythons standard functionality really is.
Lately HN is full of lame remarks, unhelpfull criticisim and general arrogancy.
Agreed. I use python a lot and I hadn't seen that dict comprehensions had been back-ported to 2.7. So while the rest of it wasn't super useful to me, that was.
(comment deleted)
After reading a few comments here I'm surprised there's no "Effective Python" book already (given the age of Python itself).

In Java and .NET, that's what we try to do everyday: writing idiomatic Java/C# code (style, architecture, patterns, standard libs, etc).

Though I have yet to come across book titled "Effective Python", books like "Python Essential Reference" by David Beazly and "Python Cook Book" covers lot of ares that you mention above.
One single productivity python I'd like to share here is to use 'string foo'.partition(' ') instead of splitting. The reason is the edge cases are better handled with partition: you always get a 3-tuple, no matter what. No need to precheck that the split is here, or to postcheck the length of the splitted list.
On the other hand, .split() with no argument splits on any amount of whitespace (\s+, as a regex). That's often quite a useful edge case to have handled for you. You can also do .split(c, 1) to limit it to a single split. It could still split 0 times, though - it just depends which edge cases you want to handle.
I was hoping to find some mention of IDE, IDE plugin, or more process oriented stuff, rather than language features.