Boolean tests [was Re: Attack a sacred Python Cow]
Carl Banks
pavlovevidence at gmail.com
Wed Jul 30 00:28:10 EDT 2008
On Jul 29, 7:30 pm, Steven D'Aprano <st... at REMOVE-THIS-
cybersource.com.au> wrote:
> On Tue, 29 Jul 2008 10:30:43 -0700, Carl Banks wrote:
> > On Jul 29, 5:15 am, Heiko Wundram <modeln... at modelnine.org> wrote:
> >> I can't dig up a simple example from code I wrote quickly, but because
> >> of the fact that explicit comparisons always hamper polymorphism
>
> > I'm not going to take your word for it. Do you have code that
> > demonstrates how "if x" improves polymorphism relative to simple
> > explicit tests?
>
> On the rapidly decreasing chance that you're not trolling (looking more
> and more unlikely every time you post):
>
> # The recommended way:
> if x:
> do_something
>
> # Carl's so-called "simple explicit tests" applied to polymorphic code:
No, the following isn't my way.
> try:
> # could be a sequence or mapping?
> # WARNING: must do this test *before* the number test, otherwise
> # "if [] != 0" will return True, leading to the wrong branch being
> # taken.
> if len(x) != 0:
> do_something
> except AttributeError:
> # not a sequence or mapping, maybe it's a number of some sort
> try:
> int(x)
> except TypeError:
> # not convertable to numbers
> # FIXME: not really sure what to do here for arbitrary types
> # so fall back on converting to a boolean, and hope that works
> if bool(x):
> do_something
> else:
> if x != 0:
> do_something
I say that you will never, ever have to do this because there isn't a
do_something that's actually useful for all these types.
Ok, tell me, oh indignant one, what is do_something? What could
possibly be the contents of do_something such that it actually does
something useful? If you can tell me what do_something is you will
have answered my question.
Carl Banks
More information about the Python-list
mailing list