Форум сайта python.su
недавно начал изучение python.
подскажите, как правильно:
def test():
....
result = "sdfsdf"
return result
def test():
....
result = "sdfsdf"
return result[:]
Офлайн
Первый вариант возвращаетс строку, второй копию этой строки.. Но зачем создавать копию строки в памяти, тем более после выполнения функции все ее локальные переменные изчезнут из памяти. Результат у твоих примеров будет тем же, но первый вариант “правильней”
Офлайн
правильно так)))
…
return “sdfsdf”
строка - это неизменяемый тип данных. нет необходимости делать копию.
Офлайн
:) Я тоже хотел так написать, но в коде у человека “…” есть, тем самым человек хотел сказать что он собирается что то делать еще в функции.. А можно еще так:
test=lambda: 'sdfsdf'
Офлайн
я так понял, если функция возвращает значение то с практической точки зрения нет разницы между передачей переменной и ее копией (для изменяемых и неизменяемых).
т.е. это только эстетический вопрос.
???
Офлайн
Если ты возвращаещь изменяемую переменную, то если кто-то ее изменит, то она может изменится. =)
А если копию, то изменится копия а не сама переменная.
В данном простом случае это всеравно. Но еслиб это был например атрибут класса…
Отредактировано (Окт. 24, 2008 21:01:21)
Офлайн
простейший пример, демострирующий высказывание shiza
def f(x):
x.append(1)
return x
l = [1,2,3]
l2 = f(l)
l.append(2)
print l2
Офлайн
Ну вероятность малая. Ведь в функциях обычно возвращается результат каких либо действий. Пусть даже это класс, все равно функция обычно нужна чтоб вычислить то, что нужно здесь и сейчас. Да и не помню чтоб у меня попадались такие трудно уловимые баги
Офлайн
спасибо за пояснения
Офлайн