返回函数的输出与打印输出有何不同?[重复]
- 2024-11-28 08:38:00
- admin 原创
- 13
问题描述:
在我之前的问题中,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
ing something 和print
ing it 之间有什么区别?
解决方案 1:
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'
。
想要一个好的教程,请查看深入 Python。它是免费的,而且非常容易理解。
解决方案 2:
print 语句将向用户输出一个对象。return 语句允许在函数完成后将字典分配给变量。
>>> 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 )
解决方案 3:
我认为您感到困惑,因为您是从 REPL 运行的,它会自动打印出调用函数时返回的值。在这种情况下,无论您有一个创建值、打印值并将其丢弃的函数,还是有一个创建值并返回值并让 REPL 打印它的函数,您都会得到相同的输出。
然而,这些并不是一回事,当您使用另一个想要使用 autoparts 创建的值执行某些操作的函数调用 autoparts 时,您就会意识到这一点。
解决方案 4:
您只需添加一个返回语句...
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()
解决方案 5:
主要区别:
调用print会立即让程序输出文本供您查看。当您想要向人类展示某个值时,请使用 print。
return 是一个关键字。当到达return语句时,Python 将停止当前函数的执行,并将值发送到调用该函数的位置。当您想将值从代码中的一个点发送到另一个点时,请使用 return。
使用 return 会改变程序的流程。使用 print 则不会。
解决方案 6:
从根本上讲,函数是一段代码,不是在编写时执行,而是在调用时执行。假设我有以下一段代码,它是一个简单的乘法函数:
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”的变量。
这不仅仅是简单地打印结果,因为您可以再次访问它。以下是使用返回语句的函数示例:
>>> 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
所以它基本上将调用函数的结果存储在变量中。
解决方案 7:
def add(x, y):
return x+y
这样它就可以成为一个变量。
sum = add(3, 5)
print(sum)
但是如果“add”函数打印输出“sum”则将为 None,因为操作在分配后已经发生。
解决方案 8:
不幸的是,字符数有限制,所以会分为很多部分。首先要注意的是,return 和 print 是语句,而不是函数,但这只是语义问题。
我先从基本解释开始。print 只是向人类用户显示一个字符串,表示计算机内部正在发生的事情。计算机无法利用这种打印。return 是函数返回值的方式。这个值通常不为人类用户所见,但计算机可以在其他函数中使用它。
从更广泛的意义上讲,print 不会以任何方式影响函数。它只是为了方便人类用户。它对于理解程序的工作原理非常有用,并且可以在调试时用来检查程序中的各种值而无需中断程序。
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 运行时,它会自动将“I marked”打印到控制台。但是,由于该函数没有 return 语句,因此 f1 中存储的值为 None。
当 function_that_returns 运行时,它没有在控制台上打印任何内容。但是,它确实返回了一个值,并且该值存储在 f2 中。当我们在代码末尾打印 f2 时,我们看到“我返回了”
解决方案 9:
以下例子可能有助于理解:
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'
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件