如何返回函数的输出与打印不同?

Tha*_*anx 33 python return

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

除了所有其他提示和技巧之外,我认为你错过了一些至关重要的东西:你的功能实际上需要返回一些东西.当你创建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, ...}
Run Code Online (Sandbox Code Playgroud)

此函数创建一个字典,但它不返回任何内容.但是,因为我添加了print,所以当我运行该函数时会显示该函数的输出.什么return东西和print它之间有什么区别?

rye*_*guy 63

打印只是将结构打印到输出设备(通常是控制台).而已.要从函数中返回它,您可以:

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
Run Code Online (Sandbox Code Playgroud)

为何回归?好吧,如果你不这样做,那个字典就会死掉(收集垃圾),一旦这个函数调用结束就不再可以访问了.如果您返回该值,则可以使用它来执行其他操作.如:

my_auto_parts = autoparts() 
print(my_auto_parts['engine']) 
Run Code Online (Sandbox Code Playgroud)

看看发生了什么?autoparts()被调用,它返回parts_dict,我们将它存储到my_auto_parts变量中.现在我们可以使用这个变量来访问字典对象,即使函数调用结束,它也会继续存在.然后我们用字符'engine'打印出字典中的对象.

有关一个好的教程,请查看潜入python.这是免费的,很容易遵循.


Jas*_*ker 8

print语句将向用户输出一个对象.返回语句将允许在函数完成后将字典分配给变量.

>>> def foo():
...     print "Hello, world!"
... 
>>> a = foo()
Hello, world!
>>> a
>>> def foo():
...     return "Hello, world!"
... 
>>> a = foo()
>>> a
'Hello, world!'
Run Code Online (Sandbox Code Playgroud)

或者在返回字典的上下文中:

>>> 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}
Run Code Online (Sandbox Code Playgroud)

(执行一行后没有打印出来的语句表示返回的最后一个语句无)


Ros*_*ant 7

我认为您很困惑,因为您是从 REPL 运行的,当您调用函数时,它会自动打印出返回的值。在这种情况下,无论您有一个创建值、打印它并丢弃它的函数,还是有一个创建值并返回它并让 REPL 打印它的函数,您都会得到相同的输出。

然而,这些并不是一回事,当您使用另一个想要对 autoparts 创建的值执行某些操作的函数调用 autoparts 时,您就会意识到这一点。