Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2008 07:14:03

wistful
От:
Зарегистрирован: 2008-07-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

недавно начал изучение python.
подскажите, как правильно:

def test():
....
result = "sdfsdf"
return result
или
def test():
....
result = "sdfsdf"
return result[:]



Офлайн

#2 Окт. 24, 2008 07:31:28

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

функция возвращающая строку

Первый вариант возвращаетс строку, второй копию этой строки.. Но зачем создавать копию строки в памяти, тем более после выполнения функции все ее локальные переменные изчезнут из памяти. Результат у твоих примеров будет тем же, но первый вариант “правильней”



Офлайн

#3 Окт. 24, 2008 09:23:39

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

правильно так)))

return “sdfsdf”

строка - это неизменяемый тип данных. нет необходимости делать копию.



Офлайн

#4 Окт. 24, 2008 11:49:18

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

функция возвращающая строку

:) Я тоже хотел так написать, но в коде у человека “…” есть, тем самым человек хотел сказать что он собирается что то делать еще в функции.. А можно еще так:

test=lambda: 'sdfsdf'
тем самым продвигая идеалогию индусткого кода



Офлайн

#5 Окт. 24, 2008 19:51:20

wistful
От:
Зарегистрирован: 2008-07-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

я так понял, если функция возвращает значение то с практической точки зрения нет разницы между передачей переменной и ее копией (для изменяемых и неизменяемых).
т.е. это только эстетический вопрос.
???



Офлайн

#6 Окт. 24, 2008 20:57:07

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

Если ты возвращаещь изменяемую переменную, то если кто-то ее изменит, то она может изменится. =)
А если копию, то изменится копия а не сама переменная.
В данном простом случае это всеравно. Но еслиб это был например атрибут класса…



Отредактировано (Окт. 24, 2008 21:01:21)

Офлайн

#7 Окт. 24, 2008 22:32:55

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

простейший пример, демострирующий высказывание 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



Офлайн

#8 Окт. 25, 2008 07:43:05

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

функция возвращающая строку

Ну вероятность малая. Ведь в функциях обычно возвращается результат каких либо действий. Пусть даже это класс, все равно функция обычно нужна чтоб вычислить то, что нужно здесь и сейчас. Да и не помню чтоб у меня попадались такие трудно уловимые баги



Офлайн

#9 Окт. 26, 2008 16:04:41

wistful
От:
Зарегистрирован: 2008-07-10
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

функция возвращающая строку

спасибо за пояснения



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version