如何使用不同的参数类型实现python函数

如何使用不同的参数类型实现python函数,python,duck-typing,Python,Duck Typing,我需要用python实现一个双参数函数。参数类型可以是:(字符串,字符串),(字符串,列表)或(列表,列表)。在Java中,我会使用重载来管理这种情况,但在python中,我可以在下一个解决方案中考虑: def myFunction(param1, param2): if isinstance(param1, basestring) and isinstance(param2, basestring): # implementation 1 elif isin

我需要用python实现一个双参数函数。参数类型可以是:(字符串,字符串),(字符串,列表)或(列表,列表)。在Java中,我会使用重载来管理这种情况,但在python中,我可以在下一个解决方案中考虑:

def myFunction(param1, param2):
     if isinstance(param1, basestring) and isinstance(param2, basestring):
        # implementation 1
     elif isinstance(param1, basestring) and isinstance(param2, list):
        # implementation 2
     elif ...

     else:
         raise TypeError
这是最好的方法吗?我是python新手


谢谢。

Duck类型表示测试方法,而不是使用
isinstance()
。您打算如何处理输入

例如,如果您要接受一个字符串,然后在换行符上拆分该字符串,并像列表一样使用它,请测试
.splitlines()


我认为更好的方法是尝试执行
arg1.splitlines()
并在异常失败时捕获异常,或者尝试将其用作列表,如果失败,则尝试使用
splitlines()
@Lattyware:这完全取决于使用频率。请参阅@MartijnPieters参数是两个文件名或文件名列表,我需要使用第一个参数文件的信息处理第二个参数文件。因此,关于您的答案,一个解决方案可能是使用字符串参数创建一个列表,并始终使用列表。如果算法因类型而异,那么您可能不应该使用1函数,而应该使用2函数,其中1处理单个实例,另一个处理实例列表。
if hasattr(arg1, 'splitlines'):
    arg1 = arg1.splitlines()
if hasattr(arg2, 'splitlines'):
    arg2 = arg2.splitlines()
# now arg1 and arg2 are presumed to be lists.