2013-11-19 2 views
1

Мое название может быть немного выключено, но я действительно не знал, как сформулировать себя.Переназначение значения, возвращаемого функцией в Python

Скажем, у меня есть функция, которая принимает структуру данных и, возможно, некоторые другие аргументы и возвращает значение из этой структуры данных. Как переназначить это возвращаемое значение?

Вот простой пример того, что я хочу сделать:

Допустим, у меня есть функция Foo,

def foo(x, n): 
    return x[n] 

и список л,

l = [1, 2, 3, 4, 5] 

, что я хочу что-то вроде этого:

foo(l, 1) = 0 #this results in an error 

Что я хочу привести следующее:

l = [1, 0, 3, 4, 5] 

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

Редактировать: Возможно, мое описание было слишком неясным, в основном то, что я хочу, является оператором присваивания, который работает как setf в lisp. Я хочу, чтобы моя функция возвращала какой-то указатель на значение в структуре данных. Затем я хочу изменить значение, на которое указывает указатель. То, что я хочу использовать его для в основном что-то вроде этого: (что я не понимаю, почему я не просто начать с как пример)

def foo(l, indexes): 
    if indexes == []: 
     return l 
    else: 
     return foo(l[indexes[0]], indexes[1:]) 
l = [[1, 2], 3] 
foo(l, [0, 1]) = 0 #Again this is what is not working and I understand why it's not working, I just want something that would do what you think this might do. 

Что я хочу привести:

l = [[1, 0], 3] 
+0

Когда функция возвращает значение 2, значение больше не 'l [1]', а просто число 2. Это не допустимая переменная для назначения. Что вам нужно сделать, это передать число '0' в функцию и назначить его' l [1] 'внутри функции. – SiddharthaRT

+0

@ndpu, нет, это не совсем то, о чем просит ОП. 'foo' возвращает значение, вы не можете использовать его в качестве индекса. – SiddharthaRT

+0

Поскольку 'foo' возвращает' int' (в этом случае), вы ** НЕ МОЖЕТ ** назначать ему любой другой 'int' (0)! –

ответ

1

Это то, что вы намерены?

def foo(thelist, n): 
    thelist.append(n) 
    return thelist 

ИЛИ вы хотите вставить?

def foo(thelist, i, n): 
    thelist.insert(i , n) 
    return thelist 

@OP после прочтения вы отредактировали сообщение; проверьте link и link есть пример, который может быть полезен.

Согласно столбцу stackoverflow; ответ - нет.

+0

Он хочет вставить число в список по определенному индексу. 'append()' добавляет число до конца. – SiddharthaRT

+1

Я уже был в процессе редактирования; таким образом, я поставил его с вопросом. – crownedzero

+0

OP хочет изменить элемент списка, а не сам список. –

0

Я все еще не понимаю, чего вы пытаетесь достичь, поэтому, пожалуйста, уточните это. Теперь похоже, что вам нужно

def foo(l, n, number): 
    ...logic... 
    l[n] = number 
    return l 

Редактировать: После прочтения вашего редактирования нет. функция возвращает значение , а не ссылка на элемент в списке.

0

То, о чем вы просите, не представляется возможным (причина в том, что вы не можете назначить от 2 до 0). Вместо использования функции, если вы используете макрос, вы можете достичь этого. python не имеет макросов как C. Но один раз взгляните на macropy, чтобы писать макросы в python.

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