在我之前的问题中,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.这是免费的,很容易遵循.
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)
(执行一行后没有打印出来的语句表示返回的最后一个语句无)
我认为您很困惑,因为您是从 REPL 运行的,当您调用函数时,它会自动打印出返回的值。在这种情况下,无论您有一个创建值、打印它并丢弃它的函数,还是有一个创建值并返回它并让 REPL 打印它的函数,您都会得到相同的输出。
然而,这些并不是一回事,当您使用另一个想要对 autoparts 创建的值执行某些操作的函数调用 autoparts 时,您就会意识到这一点。
| 归档时间: |
|
| 查看次数: |
250847 次 |
| 最近记录: |