Few days ago I was talking with my friend about most useful Python features we use almost every day. It was not about any sophisticated tools or libraries, but about the things we use often and which are “given” by the language and its syntax itself – the ones which we like just because they’re “pythonic”. I’ve picked and some of them, which are easy to describe in short devblog article. Even if most of these things should be known for most of the Python developers, I bet that many of you don’t know about at least one of them or just use to forget about using it ;)
Sometimes things don’t work in the way we want them to. Today I was asked why this piece of code is not working properly (OK, given problem was a bit different and much more “real-life-applicable”, but it’s just an example):
1 2 3 4 5 6 7 8 9
def mypush(val, mylist=): mylist.append(val) print mylist, ': ', id(mylist) lst =  mypush(1, lst) mypush(2, lst) mypush(1) mypush(2)
The output is:
1 2 3 4
 : 139750946213184 [1, 2] : 139750946213184  : 139750946218496 [1, 2] : 139750946218496
What’s wrong with it? NOTHING – that’s the way Python should and will behave in such case.
Do you agree? If yes – stop reading, because you won’t learn anything new. Go to XKCD instead. If no – here’s a brief explaination:
No matter what you do, sometimes you just need to swap some values – I guess you did it thousand times. And yes, I know – this problem is trivial. In Python it’s completely trivial. You just swap two variables in the most “natural” way:
a, b = b, a
instead of doing it this way:
1 2 3
tmp = a a = b b = tmp
Beautiful! This is why we love Python, isn’t it?
That’s the moment where I should end this post, if it was about doing it in a “pythonic” way only. But it’s not – it’s about the ideas, not the solutions in any specific language. So…
How, as a programmer, could I start this blog if not this way:
print "Hello World"
In Poland we call poor jokes like this “suchar”, which means something like “hardtack”.
Now it can only be better ;)