wistful
Окт. 24, 2008 07:14:03
недавно начал изучение python.
подскажите, как правильно:
def test():
....
result = "sdfsdf"
return result
или
def test():
....
result = "sdfsdf"
return result[:]
igor.kaist
Окт. 24, 2008 07:31:28
Первый вариант возвращаетс строку, второй копию этой строки.. Но зачем создавать копию строки в памяти, тем более после выполнения функции все ее локальные переменные изчезнут из памяти. Результат у твоих примеров будет тем же, но первый вариант “правильней”
Dimka665
Окт. 24, 2008 09:23:39
правильно так)))
…
return “sdfsdf”
строка - это неизменяемый тип данных. нет необходимости делать копию.
igor.kaist
Окт. 24, 2008 11:49:18
:) Я тоже хотел так написать, но в коде у человека “…” есть, тем самым человек хотел сказать что он собирается что то делать еще в функции.. А можно еще так:
тем самым продвигая идеалогию индусткого кода
wistful
Окт. 24, 2008 19:51:20
я так понял, если функция возвращает значение то с практической точки зрения нет разницы между передачей переменной и ее копией (для изменяемых и неизменяемых).
т.е. это только эстетический вопрос.
???
shiza
Окт. 24, 2008 20:57:07
Если ты возвращаещь изменяемую переменную, то если кто-то ее изменит, то она может изменится. =)
А если копию, то изменится копия а не сама переменная.
В данном простом случае это всеравно. Но еслиб это был например атрибут класса…
Cleric
Окт. 24, 2008 22:32:55
простейший пример, демострирующий высказывание
shizadef f(x):
x.append(1)
return x
l = [1,2,3]
l2 = f(l)
l.append(2)
print l2
если есть вероятность что изменяемый тип может быть изменен из вне, лучше делать полный срез (если это контейнер) или копировать с помощью copy.copy или copy.deepcopy
igor.kaist
Окт. 25, 2008 07:43:05
Ну вероятность малая. Ведь в функциях обычно возвращается результат каких либо действий. Пусть даже это класс, все равно функция обычно нужна чтоб вычислить то, что нужно здесь и сейчас. Да и не помню чтоб у меня попадались такие трудно уловимые баги
wistful
Окт. 26, 2008 16:04:41
спасибо за пояснения