7 ms·
Understanding python *args and **kwargs
- DannoHung 17y agoI'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.
- juvenn 17y agoBecause there're unqualified hackers here.
- scott_s 17y agoI 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. Does that make me an unqualified hacker?
- mattyb 17y agohttp://docs.python.org/dev/tutorial/controlflow.html#unpacking-argument-lists http://docs.python.org/dev/tutorial/controlflow.html#unpacki...
- randallsquared 17y agoInteresting that "unqualified hackers" can be read in two ways, both of which are true for the statement. Or maybe just interesting to me. :)
- chasingsparks 17y agoGoogle? 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? ;)
- garnet7 17y ago> I wonder what's driving it. Just some guesses/thinking-out-loud: * 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.
- TommyWiseau 17y agoJesus, does this really require such a long article? Just open the interpreter and check it out. Took me 5 minutes when I decided to figure it out.
- algorias 17y ago5 minutes followed by a sweet aha! moment. 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. Always make sure all kwargs get unpacked.
- ubernostrum 17y agoIt's also covered in the official Python tutorial.
- plinkplonk 17y agoThe number of upvotes such a content-lite article gets on HN is interesting, and maybe an indicator of a changing demographic here. What's next? a few pages on Ruby's method_missing? :-)
- drawkbox 17y agoNo kidding. 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.
- jeff18 17y agodef test(a, b, *args, **kwargs): print a, b, args, kwargs >>> test(1, 2, 3, 4, aa=5, bb=6) 1 2 (3, 4) {'aa': 5, 'bb': 6} 'nuff said