2013-12-07 4 views
4

Я хотел бы, чтобы моя функция возвращала значения 1, 2 или 3 в отношении значений bret и cret. Как сделать что-то более умное, чем это? :возвращаемое значение в Python

def myfunc (a, bret=False, cret=False): 
    b=0 
    c=0 
    if bret and cret: 
    return a,b,c 
    elif bret and not cret: 
    return a,b 
    elif not bret and cret: 
    return a,c 
    else: 
    return a 
+0

Я не уверен, что вы хотите. Что делать, если следующий вопрос будет «как обрабатывать кортежи с разной длиной»? – alko

+0

@alko Yup - особенно для двухформного возврата, где потеряно b или c ... –

+0

Вы всегда возвращаете a, a, 0 или a, 0,0 – Arovit

ответ

4

Как насчет:

def myfunc(a, bret=False, cret=False): 
    ... 
    return (a,) + ((b,) if bret else()) + ((c,) if cret else()) 
3
def myfunc (a, bret=False, cret=False): 
    b, c, ret = 0, 0, [a] 
    if bret: ret.append(b) 
    if cret: ret.append(c) 
    return ret 
+0

Downvote? Пожалуйста, скажи мне почему? – thefourtheye

1

Вы можете просто добавить свои return значения в списке или использовать yield. После этого вы можете повторить результат и сделать то, что вам нравится. Пояснение к yield -Keyword: What does the "yield" keyword do in Python?

1

Вы можете вернуть список. Посмотрите:

def myfunc (a, bret=False, cret=False): 

    list = [] 
    list.append(a) 
    b=0 
    c=0 

    if bret: 
     list.append(b) 

    if cret: 
     list.append(c) 

    return list 

Решите свой вопрос?

+0

нет, проблема не имеет списка. Проблема в том, что это не будет работать больше, если 3 условия, тогда будет 2^3 = 8 случаев, чтобы отличить! не красиво;) – Basj

+0

И это решение? – ddetoni

+0

большое спасибо. – Basj

2
def myfunc(a, bret=False, cret=False): 
    return [v for v, ret in [(a, True), (0, bret), (0, cret)] if ret] 

Найдите минутку, чтобы прочитать о Python List Comprehensions. Они очень удобны!

1

Пожалуйста, обратите внимание, если вы должны вернуть кортеж (в вашем вопросе он возвращает кортеж) использовать это -

def myfunc(a, bret=False, cret=False): 
    return tuple([a] + [0 for i in (bret, cret) if i]) 
+1

Это возвращает' bret'/'cret' вместо' b '/' c'. – NPE

+0

Я удалил свой ответ, потому что подход был неправильным. –

+0

Возвращаемое значение всегда - a, a, 0 или a, 0,0 – Arovit

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