On Fri, 06 May 2011 16:05:09 -0400, Adam Tauno Williams wrote: > I'd never accept code like "if not x" as an empty test.
So much the worse for you then. The point of the "if x" idiom is that it is a polymorphic test which is independent of the type. It works with any non-broken object[1], no matter what x is, since it allows x to decide for itself whether it is empty or not. Of course, you can write your own polymorphic test: try: flag = len(x) == 0 except TypeError: # This *should* succeed, for anything not broken. If not, we can't # recover, so just let the exception propagate. flag = bool(x) # Hilariously, bool(x) may also try len(x) == 0... oh well. if flag: ... Congratulations! You've now found a way to write "if x:" in five lines, 53 characters (plus whitespace and comments) and an extraneous variable polluting the namespace. If you're being paid per line of code, this is a good win. Of course, sometimes you don't want polymorphism (or at least, not too much polymorphism). Sometimes I'll write "if x == 0" or similar if I want to emphasize that x is a special case unrelated to the truth/falseness of x. But that's quite rare. Normally I trust x to decide for itself whether it is empty or not. [1] Arguably with the exception of iterables. But then the len(x) test doesn't work for them either. -- Steven -- http://mail.python.org/mailman/listinfo/python-list