Вопрос-Ответ

How is returning the output of a function different from printing it? [duplicate]

Чем возврат выходных данных функции отличается от их печати?

В моем предыдущем вопросе Эндрю Джаффе пишет:


В дополнение ко всем другим подсказкам, я думаю, вы упускаете что-то важное: вашим функциям действительно нужно что-то возвращать. Когда вы создаете autoparts() or splittext() , идея заключается в том, что это будет функция, которую вы можете вызывать, и она может (и должна) что-то выдавать в ответ. Как только вы определите выходные данные, которые вы хотите видеть в своей функции, вам нужно поместить их в return оператор.


def autoparts():
parts_dict = {}
list_of_parts = open('list_of_parts.txt', 'r')

for line in list_of_parts:
k, v = line.split()
parts_dict[k] = v

print(parts_dict)

>>> autoparts()
{'part A': 1, 'part B': 2, ...}

Эта функция создает словарь, но ничего не возвращает. Однако, поскольку я добавил print, выходные данные функции отображаются при запуске функции. В чем разница между returnвводом чего-либо и printвводом этого?

Переведено автоматически
Ответ 1

print просто распечатывает структуру на ваше устройство вывода (обычно консоль). Ничего больше. Чтобы вернуть ее из вашей функции, вы должны сделать:

def autoparts():
parts_dict = {}
list_of_parts = open('list_of_parts.txt', 'r')
for line in list_of_parts:
k, v = line.split()
parts_dict[k] = v
return parts_dict

Зачем возвращать? Ну, если вы этого не сделаете, этот словарь умрет (будет собран мусор) и больше не будет доступен, как только вызов этой функции завершится. Если вы вернете значение, вы сможете делать с ним другие вещи. Например:

my_auto_parts = autoparts() 
print(my_auto_parts['engine'])

Видите, что произошло? autoparts() был вызван, и он вернул parts_dict, и мы сохранили его в my_auto_parts переменной. Теперь мы можем использовать эту переменную для доступа к объекту dictionary, и она продолжает работать, даже если вызов функции завершен. Затем мы распечатали объект в словаре с ключом 'engine'.

Для получения хорошего руководства ознакомьтесь с погружение в python. Это бесплатно, и за ним очень легко следить.

Ответ 2

Оператор print выводит объект пользователю. Оператор return позволит присвоить словарь переменной после завершения работы функции.

>>> def foo():
... print "Hello, world!"
...
>>> a = foo()
Hello, world!
>>> a
>>> def foo():
... return "Hello, world!"
...
>>> a = foo()
>>> a
'Hello, world!'

Или в контексте возврата словаря:

>>> def foo():
... print {'a' : 1, 'b' : 2}
...
>>> a = foo()
{'a': 1, 'b': 2}
>>> a
>>> def foo():
... return {'a' : 1, 'b' : 2}
...
>>> a = foo()
>>> a
{'a': 1, 'b': 2}

(Операторы, в которых после выполнения строки ничего не выводится, означают, что последний оператор не вернул ничего)

Ответ 3

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

Однако это совсем не одно и то же, как вы поймете, когда вызовете autoparts с другой функцией, которая хочет что-то сделать со значением, созданным autoparts.

Ответ 4

вы просто добавляете оператор return ...

def autoparts():
parts_dict={}
list_of_parts = open('list_of_parts.txt', 'r')
for line in list_of_parts:
k, v = line.split()
parts_dict[k] = v
return parts_dict

при распечатке выводится только стандартный вывод (экран) приложения. Вы также можете возвращать несколько объектов, разделяя их запятыми:

return parts_dict, list_of_parts

как это использовать:

test_dict = {}
test_dict = autoparts()
python