检查输入函数的参数类型

时间:2013-05-10 09:02:58

标签: python

所以我想创建一个函数,并根据传入的参数类型执行不同的操作。具体来说,我希望它在输入字符串时执行一项操作,如果输入了列表则需要执行其他操作。这在Python中可行吗?如果是这样我将如何去做呢?

目前我已尝试使用isinstance()但它似乎没有点击我的任何if语句:

def tester(*args):
    if (isinstance(args, str)):
        return "String"
    elif (isinstance(args, list)):
        return"List"
    else:
        return "You dun goofed"

编辑:用户一次只能传递一个参数,无论是列表还是字符串。

2 个答案:

答案 0 :(得分:3)

*args是传递给参数的参数的元组。 splat(*)运算符解包函数调用中给出的参数,例如。

>>> def tester(*args):
        print args
        print type(args)


>>> tester(1, 'a')
(1, 'a')
<type 'tuple'>

所以你可能想做的就是检查每个args上的isinstance,并确保它们都是strlist,例如:

if all(isinstance(a, str) for a in args):

答案 1 :(得分:2)

看起来你要传递的只是你函数的一个参数。在这种情况下,删除'*',因为它总是被视为参数元组。它是可变长度参数,当您不确定您需要的参数数量时,可以使用它。

def tester(args):
    if (isinstance(args, str)):
        return "String"
    elif (isinstance(args, list)):
        return"List"
    else:
        return "You dun goofed"

如果你的函数实际上需要可变长度参数,并且你想检查传递的第一个参数是字符串还是列表,你可以这样做:

def tester(*args):
    if (isinstance(args[0], str)):
        return "String"
    elif (isinstance(args[0], list)):
        return"List"
    else:
        return "You dun goofed"