在我之前的question中,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, ...}
此函数创建一个字典,但它不返回任何内容。但是,由于我添加了print
,因此在运行该函数时会显示该函数的输出。 return
某事物与print
之间有什么区别?
答案 0 :(得分:61)
打印只是将结构打印到输出设备(通常是控制台)。而已。要从函数中返回它,你可以这样做:
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。这是免费的,很容易理解。
答案 1 :(得分:8)
print语句将向用户输出一个对象。返回语句将允许在函数完成后将字典分配给变量 。
>>> 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}
(执行一行后没有打印出来的语句意味着最后一个语句返回无)
答案 2 :(得分:4)
我认为你很困惑,因为你是从REPL运行的,它会自动打印出你调用函数时返回的值。在这种情况下,无论你有一个创建值的函数,打印它,抛出它,或者你有一个创建一个值并返回它的函数,让你得到相同的输出,让REPL打印它。
然而,这些是非常不一样的,因为当你用另一个想要用autoparts创造的值做某事的函数调用autoparts时你会意识到。
答案 3 :(得分:3)
你只需添加一个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()
答案 4 :(得分:2)
在基本级别上,一个函数是一个代码块,可以执行,而不是在编写时而是在调用时执行。假设我有以下代码,这是一个简单的乘法函数:
def multiply(x,y):
return x * y
因此,如果我使用multiply(2,3)
调用该函数,它将返回值6。如果我修改了该函数,则它看起来像这样:
def multiply(x,y):
print(x*y)
return x*y
...然后输出如预期的那样,打印出数字6。但是,这两个语句之间的区别在于,print
仅在控制台上显示了某些内容,而return
则将其“返回”给通常称为变量的内容。然后,在变量所调用的函数中为其分配return语句的值。这是python shell中的示例:
>>> def multiply(x,y):
return x*y
>>> multiply(2,3) #no variable assignment
6
>>> answer = multiply(2,3) #answer = whatever the function returns
>>> answer
6
因此,现在该函数已将调用该函数的结果返回到调用它的位置,在这种情况下,该变量是一个名为“ answer”的变量。
这不仅仅是简单地打印结果,因为您可以再次访问它。这是使用return语句的函数示例:
>>> x = int(input("Enter a number: "))
Enter a number: 5
>>> y = int(input("Enter another number: "))
Enter another number: 6
>>> answer = multiply(x,y)
>>> print("Your answer is {}".format(answer)
Your answer is 30
因此,它基本上将调用函数的结果存储在变量中。
答案 5 :(得分:1)
主要区别:
调用 print 将立即使程序写出文本供您查看。当您想向人类展示价值时,请使用print。
return是一个关键字。 到达 return 语句时,Python将停止执行当前函数,并将值发送到调用该函数的位置。要将值从代码中的一个点发送到另一个点时,请使用return。
使用return更改程序的流程。不使用打印。
答案 6 :(得分:0)
此外,这也是
def f():
print("A")
a=f()
print(a.lower())
会抛出错误,但是:
def f():
return "A"
a=f()
print(a.lower())
取得理想的结果。
说明:
如果您这样做type(print())
返回Output,则它为None,所以类型为NoneType,所以NoneType作为非属性lower()
,OTOH return
在这里是一个字符串,因此没有错误,有效完美
答案 7 :(得分:0)
def add(x, y):
return x+y
这样,它便可以成为变量。
sum = add(3, 5)
print(sum)
但是如果打印'add'函数,则输出'sum'将为None,因为分配该赋值后便已经进行了操作。
答案 8 :(得分:0)
不幸的是,有一个字符限制,所以这在很多地方都存在。首先要注意的是return和print是语句,不是函数,但这只是语义。
我将从基本说明开始。 print只是向用户显示一个字符串,代表计算机内部发生的事情。计算机无法使用该打印。 return是函数如何返回值。该值通常是人类用户看不到的,但是计算机可以将其用于其他功能。
在更宽泛的音符上,打印不会以任何方式影响功能。它只是为了人类用户的利益而存在。这对于了解程序的工作方式非常有用,可用于调试程序以检查程序中的各种值而不会中断程序。
return是函数返回值的主要方式。所有函数都将返回一个值,如果没有return语句(或yield,但不必担心),它将返回None。然后,一个函数返回的值可以进一步用作传递给另一个函数的参数,存储为变量,或者只是打印出来以使人类受益。 考虑以下两个程序:
def function_that_prints():
print "I printed"
def function_that_returns():
return "I returned"
f1 = function_that_prints()
f2 = function_that_returns()
打印“现在让我们看看f1和f2的值是什么”
打印f1 --->无
打印f2 ---->“我回来了”
运行function_that_prints时,它会自动打印到控制台“我已打印”。但是,存储在f1中的值为None,因为该函数没有返回语句。
运行function_that_returns时,它没有在控制台上打印任何内容。但是,它确实返回了一个值,并且该值存储在f2中。当我们在代码末尾打印f2时,我们看到了“我回来了”
答案 9 :(得分:0)
以下示例可能有助于理解:
def add_nums1(x,y):
print(x+y)
def add_nums2(x,y):
return x+y
#----Function output is usable for further processing
add_nums2(10,20)/2
15.0
#----Function output can't be used further (gives TypeError)
add_nums1(10,20)/2
30
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-124-e11302d7195e> in <module>
----> 1 add_nums1(10,20)/2
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'