2013-05-10 3 views
0

Je veux donc créer une fonction et la faire fonctionner différemment en fonction du type de paramètre transmis. Spécifiquement je veux faire une chose si une chaîne est entrée, et quelque chose sinon si une liste est entrée. Est-ce possible en Python? Et si oui, comment pourrais-je y aller?Vérification du type de paramètre entré dans une fonction

Au moment où je l'ai essayé d'utiliser isinstance(), mais il ne semble pas être de frapper l'un de mes déclarations: si

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

EDIT: L'utilisateur ne jamais passer dans un argument à une heure, soit une liste ou une chaîne.

+3

'* args' sera * toujours * retourne un tuple. – Volatility

+0

Ah merci, y a-t-il une autre façon de faire ce que j'essaie de faire? – Kayra

+0

La fonction va-t-elle accepter un paramètre? Ou l'utilisateur peut-il entrer plus? – Volatility

Répondre

2

On dirait que tout ce que vous passerez est un seul argument à votre fonction. Dans ce cas, supprimez le '*' car il est toujours considéré comme un tuple d'arguments. Il est arguments de longueur variable et doit être utilisé lorsque vous n'êtes pas sûr du nombre d'arguments dont vous avez besoin.

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

Si votre fonction nécessite en fait des paramètres de longueur variable et que vous voulez vérifier si le premier paramètre étant passé est une chaîne ou une liste, vous pouvez faire:

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

Cela m'a aidé à mieux comprendre les choses, merci beaucoup :) – Kayra

3

*args est le tuple des arguments passés à l'argument. L'opérateur splat (*) décompresse les arguments donnés dans l'appel de fonction par exemple.

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


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

donc ce que vous voulez sans doute faire est de vérifier isinstance sur chacun des args et assurez-vous qu'ils sont tous str ou list par exemple:

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

+1 pour l'utilisation de * all * et l'expression du générateur. –

Questions connexes