Найти - Пользователи
Полная версия: функция возвращающая строку
Начало » Python для новичков » функция возвращающая строку
1
wistful
недавно начал изучение python.
подскажите, как правильно:
def test():
....
result = "sdfsdf"
return result
или
def test():
....
result = "sdfsdf"
return result[:]
igor.kaist
Первый вариант возвращаетс строку, второй копию этой строки.. Но зачем создавать копию строки в памяти, тем более после выполнения функции все ее локальные переменные изчезнут из памяти. Результат у твоих примеров будет тем же, но первый вариант “правильней”
Dimka665
правильно так)))

return “sdfsdf”

строка - это неизменяемый тип данных. нет необходимости делать копию.
igor.kaist
:) Я тоже хотел так написать, но в коде у человека “…” есть, тем самым человек хотел сказать что он собирается что то делать еще в функции.. А можно еще так:
test=lambda: 'sdfsdf'
тем самым продвигая идеалогию индусткого кода
wistful
я так понял, если функция возвращает значение то с практической точки зрения нет разницы между передачей переменной и ее копией (для изменяемых и неизменяемых).
т.е. это только эстетический вопрос.
???
shiza
Если ты возвращаещь изменяемую переменную, то если кто-то ее изменит, то она может изменится. =)
А если копию, то изменится копия а не сама переменная.
В данном простом случае это всеравно. Но еслиб это был например атрибут класса…
Cleric
простейший пример, демострирующий высказывание shiza

def 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
Ну вероятность малая. Ведь в функциях обычно возвращается результат каких либо действий. Пусть даже это класс, все равно функция обычно нужна чтоб вычислить то, что нужно здесь и сейчас. Да и не помню чтоб у меня попадались такие трудно уловимые баги
wistful
спасибо за пояснения
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB