Roy Smith <r...@panix.com> Wrote in message: > In article <lh7cb4$ntu$2...@news.albasani.net>, > Johannes Bauer <dfnsonfsdu...@gmx.de> wrote: > >> On 29.03.2014 20:05, Steven D'Aprano wrote: >> > On Sat, 29 Mar 2014 11:56:50 -0700, contact.trigon wrote: >> > >> >> if (a, b) != (None, None): >> >> or >> >> if a != None != b: >> >> >> >> Preference? Pros? Cons? Alternatives? >> > >> > if not (a is b is None): ... >> > >> > Or if you prefer: >> > >> > if a is not b is not None: ... >> >> Is this an obfuscated coding contest? Why do you opt for a solution that >> one has to at least think 2 seconds about when the simplest solution: >> >> if (a is not None) or (b is not None): >> >> is immediately understandable by everyone? > > I agree with that. But > >> if (a, b) != (None, None): > > seems pretty straight-forward to me too. In fact, if anything, it seems > easier to understand than > >> if (a is not None) or (b is not None): > > I certainly agree that things like > >> if a is not b is not None: ... > > belong in an obfuscated coding contest. Code gets read a lot more often > than it get written. Make it dead-ass simple to understand, and future > generations of programmers who inherit your code will thank you for it. >
The other advantage to keeping it simple is it's more than likely to be right. If we take the original form as the spec, we'll find that two of the alternatives are not even equivalent. def trigon1(a, b): return (a,b) != (None, None) #master def trigon2(a, b): return a != None != b. # different def steven1(a, b): return not(a is b is None) def steven2(a, b): return a is not b is not None #different def johannes(a, b): return (a is not None) or (b is not None) table = [ trigon1, trigon2, steven1, steven2, johannes ] for func in table: print func.__name__ print func(None, None), func(None, 42), func(42, None), func(42, 42), func(42, "never") -- DaveA -- https://mail.python.org/mailman/listinfo/python-list