Как вернуть несколько значений из * args? - PullRequest
5 голосов
/ 05 декабря 2011

У меня есть функция hello, и она принимает n аргументов (см. Код ниже).

def hello(*args):
  # return values

Я хочу вернуть несколько значений из *args. Как это сделать? Например:

d, e, f = hello(a, b, c)

РЕШЕНИЕ:

def hello(*args):
  values = {} # values
  rst = [] # result
  for arg in args:
    rst.append(values[arg])
  return rst

a, b, c = hello('d', 'e', f)
a, b = hello('d', 'f')

Просто верните список. :): D

Ответы [ 4 ]

9 голосов
/ 05 декабря 2011

Итак, вы хотите вернуть новый кортеж той же длины, что и args (то есть len (args)), и значения которого вычисляются из args [0], args [1] и т. Д. Обратите внимание, что вы не можете изменить 'args' напрямую, например, Вы не можете назначить args [0] = xxx, это недопустимо и вызовет TypeError: объект 'tuple' не поддерживает назначение элементов. Затем вам нужно вернуть новый кортеж, длина которого равна len (args). Например, если вы хотите, чтобы ваша функция добавляла по одному в каждый аргумент, вы можете сделать это следующим образом:

def plus_one(*args):
    return tuple(arg + 1 for arg in args)

Или более подробно:

def plus_one(*args):
    result = []
    for arg in args: result.append(arg + 1)
    return tuple(result)

Затем, делая:

d, e, f = plus_one(1, 2, 3)

вернет трехэлементный кортеж со значениями 2, 3 и 4.

Функция работает с любым количеством аргументов.

1 голос
/ 05 декабря 2011

args это список.если вы возвращаете последовательность (list, tuple), Python попытается выполнить итерацию и назначить переменные d, e, f.поэтому следующий код в порядке.

def hello(*args):
   return args

d, e,  f = hello(1,2,3)

Пока у вас есть, правильное количество значений в списке * args.Он будет присвоен вашим переменным.Если нет, il вызовет исключение ValueError.

d, e, f = hello(1, 2) #raise ValueError

Надеюсь, это поможет

1 голос
/ 05 декабря 2011

Просто верните кортеж:

def hello(*args):
    return 1, 2, 3

... или ...

    return (1, 2, 3)
0 голосов
/ 05 декабря 2011

Просто верните их. Например, если вы хотите вернуть параметры без изменений, сделайте следующее:

def hello(*args):
    return args

Если вы хотите вернуть что-то еще, верните это вместо:

def hello(*args):
    # ...
    # Compute d, e and f
    # ...
    return d, e, f
...