如何返回一个函数的输出不同于打印?

在我之前的问题中 ,Andrew Jaffe写道:

除了所有其他提示和技巧外,我认为你错过了一些至关重要的东西:你的函数实际上需要返回一些东西。 当你创buildsplittext() 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, ...} 

这个函数创build一个字典,但是它不返回任何东西。 但是,由于我添加了print ,当我运行该function时,会显示该function的输出。 return东西和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_partsvariables。 现在我们可以使用这个variables来访问字典对象,即使函数调用结束,它仍然继续存在。 然后,我们用“引擎”键在字典中打印出对象。

对于一个很好的教程,看看跳进python 。 它是免费的,很容易遵循。

print语句将输出一个对象给用户。 一旦函数完成, return语句将允许将字典分配给一个variables。

 >>> 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} 

(在执行一行后没有任何内容被打印出来的语句意味着返回的最后一个语句无)

你只需添加一个返回语句…

 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() 

我觉得你很困惑,因为你从REPL运行,它会自动打印出你调用函数时返回的值。 在这种情况下,不pipe你是否有一个创build一个值,打印并抛出它的函数,或者你有一个创build一个值并返回它的函数,让REPL打印它,你的确会得到相同的输出。

然而,这些并不是一回事,因为当你用另一个想用autoparts创build的值做某些事情的函数调用autoparts时,你会意识到这一点。