what is the the best way to express following:

Paul McGuire ptmcg at austin.rr._bogus_.com
Mon Mar 27 21:42:24 EST 2006


"AndyL" <ask at me> wrote in message news:_uOdnaBMCLmcPLXZRVn-uA at comcast.com...
> if type(key).__name__ == "int" or type(key).__name__ == "long":
>      abc()
> elif type(key).__name__ == "str":
>      efg()
> elif type(key).__name__ == "tuple" or type(key).__name__ == "list":
>      ijk()
>
>
> In other words I need to determinie intiger type or string or []/() in
> elegant way, possibly without or ...
>
> Thx, A.

Your literal Pythonic approach is to use the isinstance() builtin:

if isinstance(key,(int,long)):
   abc()
elif isinstance(key,str):
   efg():
elif isinstance(key,(tuple,list)):
   ijk()


But since you are dispatching to a method based on type (or some other type
of enumerated condition), even more Pythonic is to use a dict to create a
dispatch table:

dispatch = {
   int : abc,
   long : abc,
   str : efg,
   tuple : ijk,
   list : ijk,
   }
try:
   fn = dispatch[ type(key) ]
except KeyError:
   print "No handler for key of type", type(key)
else:
   fn()


-- Paul





More information about the Python-list mailing list