Forgetting "()" when calling methods
Alex Martelli
aleax at aleax.it
Sun Apr 27 03:52:37 EDT 2003
Andrew Bennetts wrote:
...
> lack of a better word. It's usually not any clearer to say
>
> if len(myList) == 0:
> print "I have a list of stuff"
The "== 0" part here is making it to the reverse of what you probably mean.
> than
>
> if myList:
> print "I have a list of stuff"
Absolute agreement here.
> I think the same applies to testing to see if a variable holds a callable,
Not at all. "if callable(thevariable):" is the one obvious way to check
THAT. "if thevariable:" is going to have you try to call the number 23,
the string 'loolapalooza', and non-empty dicts and lists.
> just as much as it applies to checking the length of something. Removing
The two cases are very different. "if len(myList):" is equivalent to
"if myList:" *for a known given type of myList* -- a container. In
the callable case, you _don't know_ the type -- and are checking the
VALUE to try and infer the TYPE. Checking callable(f) is more obvious
and direct -- it clearly and unambiguously shows what you're checking.
> this feature will lead to unnecessarily longer code for minimal benefit.
I dispute the "unnecessarily" and the "minimal". Tests for "is None"
add clarity (when they're applicable), and tests for callable(f) even
more so. And giving newbies a little help by diagnosing a very common
newbie error more promptly would help (or at least it might, were it
not for some newbies' insistence that the diagnosis should be performed
by static analysis instead -- it just can't, and thus said insistence
convinces me that this is not worth putting to a PEP -- however, I find
the arguments against it quite unconvincing, except for the "we can't
break this idiom because even though it's inferior it's widely used").
Alex
More information about the Python-list
mailing list