Форум сайта python.su
Не нашел подобной темы, удивился.
Как заставить питон “передавать параметры по ссылке”? Из документации я знаю, что все параметры - объекты и передаются исключительно по ссылке. Я хочу понять, как написать такое:
def f1(s):
r = s[:5]
s = s[5:]
return r
...
s = 'abcdefgh'
r = f1(s)
print(r)
print(s)
--- output ---
abcde
fgh
Офлайн
Так?
def f1(s):
return s[:5], s[5:]
s = 'abcdefgh'
r,s = f1(s)
Офлайн
нет, s остаётся той же самой. А хорошо бы, чтобы менялась. Так, как вы написали, я пока сделал “чтоб работало”.
Как-то в питоне 3.1 я писал ref или что-то вроде того (не могу ни найти, ни вспомнить). Нужно такое решение (и чтобы работало в 2.6). Есть такое?
Офлайн
GradientПо-моему вы хотите странного. Если в функцию передается ссылка, то можно менять не саму ссылку, а объект на который она ссылается.
нет, s остаётся той же самой. А хорошо бы, чтобы менялась.
Отредактировано (Окт. 2, 2009 11:34:25)
Офлайн
строка неизменяема.
Офлайн
и со списком такое не получится.
срез создает копию.
Офлайн
global подойдет ?!
Но на самом деле, это не есть хорошо…
Отредактировано (Окт. 2, 2009 12:20:34)
Офлайн
Вообще можно врядли что так:
def egg(list_with_string):
r = list_with_string[0][:5]
list_with_string[0] = list_with_string[0][5:]
return r
s = ["my string"]
egg(s)
print s
Отредактировано (Окт. 2, 2009 12:52:51)
Офлайн
Получится:
def f1(s):
r = s[:5]
s[:] = s[5:]
return r
s = list('abcdefgh')
r = f1(s)
print(''.join(r))
print(''.join(s))
Офлайн
Остановился пока на виде
def f1(s)
r = s[:5]
s = s[5:]
return s, r
...
s, r = f1(s)
Офлайн