Форум сайта python.su
0
Сразу скажу что мой вопрос элементарный, и я пробовал нагуглить ответ, но ничего толком не нашел.
Например, есть функция которая должна вернуть аргумент увеличенный на 1, как присвоить результат работы функции переменной?
Мне нужно чтобы функция изменила значение переменной, и это можно было увидеть в основном модуле. Как правильно это сделать?
l = [1, 2, 3, 4, 5]
def plus_1(x):
for item in x:
item = item + 1
return x
plus_1(l)
print l
l = [1, 2, 3, 4, 5] #Вот что я получаю
l = [2, 3, 4, 5, 6] #Вот что я хочу получить
Офлайн
857
def plus_1(x):
for i in xrange(len(x)):
x[i] += 1
return x
lst = [1, 2, 3, 4, 5]
plus_1(lst)
print lst
- for i in range(len(x)):
+ for i in xrange(len(x)):
- lst[i] += 1
+ x[i] += 1
Отредактировано (Март 23, 2012 06:12:26)
Офлайн
0
Почему же у меня не работает? Принципиальной разницы не вижу.
Офлайн
186
> Почему же у меня не работает? Принципиальной разницы не вижу.
Потому что вы в цикле создаёте локальную переменную item, а не изменяйте глобальную l.
Офлайн
0
Rodegast
Я знаю что передается по значению. Просто код в первом и втором посте похож, но во втором случае работает, а в первом нет.
Значение списка меняется на заданное при выходе из for.
Отредактировано (Март 22, 2012 21:44:21)
Офлайн
568
asdf
Rodegast
Я знаю что передается по значению. Просто код в первом и втором посте похож, но во втором случае работает, а в первом нет.
Значение списка меняется на заданное при выходе из for.
>>> x=1
>>> def plus(x):
return x+1
>>> plus(x)
2
>>> x
1
>>> def plus_1(x):
x+=1
return x
>>> plus_1(x)
2
>>> x
1
>>> x=plus(x)
>>> x
2
Офлайн
0
FishHook
Как только заканчивается for у меня функция возвращает глобальное значение. Что конкретно в моем примере не так?
Я меняю значение присваиванием, а во втором посте значение изменяется присваиванием по индексу элемента. Это просто два разных способа, которые должны дать одинаковый результат.
Отредактировано (Март 23, 2012 11:19:06)
Офлайн
0
Введите свой код сюда:
http://people.csail.mit.edu/pgbovine/python/tutor.html#mode=edit
И убедитесь, что в цикле массив не изменяется, изменяется только переменная item.
Офлайн
0
mr-x
>>> l = [1,2,3,4,5]
>>> def plus1(x):
... for item in x:
... item = item +1
... print item
... return x
...
>>> plus1(l)
2
3
4
5
6
[1, 2, 3, 4, 5]
Офлайн
52
Два очевидных решения:
>>> m = [1,2,3,4,5]
>>> def foo(m):
... return [i+1 for i in m]
>>> m = foo(m)
>>> m
[2, 3, 4, 5, 6]
>>> def bar(m):
... return map(lambda x:x+1, m)
>>> m
[2, 3, 4, 5, 6]
>>> m = bar(m)
>>> m
[3, 4, 5, 6, 7]
Офлайн