在python中根据参数类型选择一个函数

时间:2011-07-27 15:40:37

标签: python

我有一个函数,它接受一组任意参数,然后根据参数的类型选择正确的函数来处理它们。

我目前的方法是在所有处理函数上使用装饰器来检查参数的类型,然后遍历所有函数,直到接受参数。

关于这一点似乎对我来说有些苛刻,而且作为一个相对较新的python程序员,我想知道是否有更多'pythonic'方法来做到这一点。

所以,目前,我有这样的事情:

def function_router(*args):
   for func in functions: #functions is a list of functions
      try:
         return func(*args)
      except TypeError:
         pass
    #probably raise an exception if no function works

并且'functions'中的每个函数都有一个像这样的装饰器:

def accepts(*types) :
   def my_decorator(func):
      def wrapped(*args, **kwargs):
         for i in range(len(types)):
            if not isinstance(args[i], types[i]):
               raise TypeError('Type error, %s not instance of %s, it is %s' %(args[i],types[i], type(args[i])))
            return func(*args, **kwargs)
      return wrapped
   return my_decorator
编辑:哦,伙计,我其实非常喜欢阅读所有的解决方案。我选择的答案对我目前正在做的事情最有效,但我从所有答案中学到了一些东西,所以谢谢大家的时间。

2 个答案:

答案 0 :(得分:4)

执行此操作的正确方法可能是使用关键字参数,而不是依赖于参数的类型。这样,您不必装饰小函数,只需正确命名参数即可。它还可以让你利用Python的鸭子打字。

答案 1 :(得分:2)

听起来你正试图描述多种方法,GvR为此提供了nice recipe in the form of a decorator.