Почему для args () возвращается только одно значение при использовании return ()? - PullRequest
0 голосов
/ 23 января 2019
def myfunc(*args):
   for i in (args):
       if i % 2 == 0:
           return i

myfunc(1,2,3,4,5,6)

Вывод: 2

Я хотел бы вернуть все четные значения

Ответы [ 5 ]

0 голосов
/ 23 января 2019

Ваша функция останавливается, пока выполняется первое выражение return. Альтернатива:

def myfunc(*args):
    result = []
    for i in (args):
        if i % 2 == 0:
            result.append(i)
    return result
myfunc(1,2,3,4,5,6)
0 голосов
/ 23 января 2019

Почему для args () возвращается только одно значение при использовании return ()?

- args ничего не возвращает.Вы просто передаете свой вклад функции через это.- Вы также используете возврат в вашем цикле for, который заставляет функцию возвращать прерванный цикл.

Попробуйте следующий код:

def myfunc(*args):
    return [x for x in args if x%2 == 0]

print myfunc(1,2,3,4,5,6)

Выход:

[2, 4, 6]
0 голосов
/ 23 января 2019

Вы возвращаете 1-е значение, которое удовлетворяет if condition.Вам нужно сохранить все значения в list, а затем вернуться после завершения for loop.

def func(*args):
    temp = []
    for i in (args):
        if i%2==0:
            temp.append(i)
    return temp

print(func(1,2,3,4,5,6))

Вывод:

[2,4,6]
0 голосов
/ 23 января 2019

Вы должны определить list в вашей функции, чтобы сохранить все четные числа и заставить функцию возвращать сам список. Ниже будет работать:

In [697]: def myfunc(*args):
     ...:     even = []
     ...:     for i in (args):
     ...:         if i % 2 == 0:
     ...:             even.append(i)
     ...:     return even


In [698]: myfunc(1,2,3,4,5,6)
Out[698]: [2, 4, 6]
0 голосов
/ 23 января 2019

Как предлагается в комментарии, вы не можете вернуть более одного значения.Таким образом, вы можете добавить все, что вы даже цените в список, и использовать это.

def myfunc(*args):
   list1 = list()
   for i in (args):
       if i % 2 == 0:
           list1.append(i)
   return list1

myfunc(1,2,3,4,5,6)

В качестве альтернативы, вы можете использовать функцию генератора для получения значений одно за другим.

def myfunc(*args):
   for i in (args):
       if i % 2 == 0:
           yield i


something = myfunc(1,2,3,4,5,6)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...