返回函数输出与打印的区别是什么?
除了其他的提示和建议,我觉得你缺少了一个关键点:你的函数实际上需要返回一些东西。当你创建
autoparts()
或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
它之间有什么区别呢?
9 个回答
我觉得你可能有点困惑,因为你是在REPL环境中运行代码,REPL会自动显示你调用函数时返回的值。在这种情况下,无论你是有一个函数创建一个值、打印出来然后丢掉,还是有一个函数创建一个值并返回它,让REPL来打印,输出看起来都是一样的。
不过,这两者其实是完全不同的,等你用另一个函数去调用autoparts,并想对autoparts创建的值做点什么的时候,你就会明白了。
打印语句会把一个对象显示给用户。而返回语句则是在函数执行完毕后,可以把字典的内容赋值给一个变量。
>>> 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}
(如果一行代码执行后没有任何输出,说明最后的语句返回了None,也就是什么都没有。)
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
这个变量里。现在我们可以用这个变量来访问字典对象,即使函数调用结束了,它依然存在。然后我们用键 'engine'
打印出了字典中的对象。
如果想要一个好的教程,可以看看 dive into python。这个教程是免费的,而且非常容易理解。