On Mon, 08 Dec 2014 11:35:36 +1100, Chris Angelico wrote: > On Mon, Dec 8, 2014 at 11:27 AM, Roy Smith <r...@panix.com> wrote: >> Although, to be honest, I'm wondering if this is more straight-forward >> (also not tested): >> >> def myzip37(*args): >> if not args: >> return >> iters = list(map(iter, args)) > > Yes, I prefer this too. It's explicit and clear that passing no > arguments will yield no values.
The first version is explicit and clear too. I'm sorry to say this, but it is true: if you (generic you) don't recognise that while iters: ... skips the while block if iters is an empty list, then *you* have a problem, not the code. You're simply not fluent with the language. (Or you have a strange blind-spot, in which case you have my sympathy but that's your problem to deal with, not mine.) This is not an obscure corner of some rarely-used library that has a strange and weird API, it is a fundamental part of Python. I *guarantee* that there are people who will bitch and moan about your example too, and insist that the only "right" way to write it is to be "explicit" that an empty tuple is falsey: if not args == (): return and there will be some who are convinced that operator precedence is too "implicit": if not (args == ()): # args != () is okay too return Dumbing down code is an anti-pattern, because there's always somebody just a little less fluent in the language who will complain that it isn't dumbed down enough. Sometimes we have this meme that if you can't take in code at a glance and instantly understand it, it's bad code. But that meme is untrue, and we all know that it is untrue: real world code is often hard to understand because it can't be any simpler. Try understanding the code for a web server, or code that calculates the square root of a number, or code for importing a module. Occasionally, very occasionally, we have a combination of programming language and algorithm which combines in such a way that you can actually implement a useful algorithm in a simple, elegant, minimalist way. As programmers, we all know how fecking rare this is: we start with an elegant five line function, and by the time we cover all the corners and fix the bugs it's twenty lines and you can't tell what it does any more without studying it for ten minutes. zip() is an exception, you can write zip() in Python beautifully. It breaks my heart that there are people who think that it is improved by adding unnecessary guard clauses to it. -- Steven -- https://mail.python.org/mailman/listinfo/python-list