2013-05-10 2 views
0

Итак, я хочу создать функцию и выполнить ее по-разному в зависимости от типа переданного параметра. В частности, я хочу, чтобы он делал одно, если строка была введена, и что-то else, если список введен. Возможно ли это на Python? И если да, то как мне это сделать?Проверка типа параметра, введенного в функцию

На данный момент я попытался с помощью isinstance(), но это, кажется, не ударять любой из моих если заявления:

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

EDIT: Пользователь будет только когда-либо проходил мимо в один аргумент в время, либо список, либо строку.

+3

'* args' будет * всегда * вернуть кортеж. – Volatility

+0

Ах, спасибо, есть ли другой способ сделать то, что я пытаюсь сделать? – Kayra

+0

Будет ли функция принимать один параметр? Или пользователь может ввести больше? – Volatility

ответ

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" 
+0

Это помогло мне понять вещи намного лучше, спасибо вам большое :) – Kayra

3

*args - tuple аргументов, переданных аргументу. Оператор splat (*) распаковывает аргументы, указанные в вызове функции, например.

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


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

Так что вы, вероятно, хотите сделать, это проверить isinstance на каждом из арг и убедитесь, что все они str или list, например:

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

+1 для использования * all * и выражения генератора. –

Смежные вопросы