What the article seems to miss, though (only skimmed it), is that you need to be incredibly careful with taking kwargs, specially if you're passing them along into secondary functions within the called function. Hidden bugs lie that way, as you could end up with bad/misspelled args that you think are having an effect, but aren't.
A much, much more simple way to put it is
anything *args is a list, anything **kwargs is
a dictionary.
The * simply means list (set).
** simply means dictionary (name/value pairs)
* and ** has a much different meaning in other
languages as parameters.
* args is very similar to ... in other languages
that let you send n arguments.
I've noticed quite a bit of introductory level Python stuff showing up on HN lately, and while there's nothing wrong with that (and I appreciated the link to the Decorator PEP because I'd forgotten about the decorator generator 3rd party module), I wonder what's driving it.
Google? Honestly, I just took what I assumed was going to be a plunge back into Python for web development (preferred lang is Ruby). I opted to relearn Python because Google has a visible preference for it. After a 24 hour refresher (reading Guido's documentation), I am pleasantly surprised. Who knew Python actually has some strong things going for it? ;)
* people are getting sick of php (well, sicker than usual)
* Python 3 has been out for a while and it's starting to be used by more people
* Perl 6 is seeing regular releases, some tutorial material is showing up out there, so maybe it's having an effect of getting people interested in new languages
* It's possible that some Rubyists who left the ship are now returning.
I was unfamiliar with args and kwargs in Python, despite using the language for lots of scripting, and liking the language immensely. It's a simple concept and now I get it, but I'm still unclear on what star and starstar mean, which is something I keep meaning to look up.