返回函数的输出与打印输出有何不同?[重复]

2024-11-28 08:38:00
admin
原创
164
摘要:问题描述:在我之前的问题中,Andrew Jaffe写道:除了所有其他提示和技巧之外,我认为您还忽略了一些关键点:您的函数实际上需要返回某些内容。当您创建autoparts()或时splittext(),其想法是,这将是一个您可以调用的函数,并且它可以(并且应该)返回某些内容。一旦您确定了希望函数具有的输出,...

问题描述:

在我之前的问题中,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,因此运行该函数时会显示该函数的输出。returning something 和printing 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'
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1247  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用,助力企业提升产品开发效率、降低成本、增强市场竞争力。深入理解其核心要素,对于企业成功实施 IPD 研发管理体系至关重要。以下将对 IPD 研发管理体系的四大核心要素进行详细解析。...
IPD流程中的charter   19  
  IPD(Integrated Product Development)研发管理体系强调将产品开发视为一个完整的流程,从市场需求出发,整合企业的各种资源,实现产品的快速、高质量交付。在这个过程中,成本控制是至关重要的一环,它直接关系到产品的竞争力和企业的盈利能力。有效的成本控制能够确保在不牺牲产品质量和性能的前提下,降低...
IPD开发流程管理   22  
  IPD(Integrated Product Development)项目管理作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它通过整合跨部门团队,实现从概念到产品上市的全流程高效管理,提升产品竞争力。深入探讨IPD项目管理的六个关键阶段,对于企业理解和运用这一模式,优化产品开发流程具有重要意义。概念阶段概...
IPD概念阶段   29  
  IPD(Integrated Product Development)流程管理作为一种先进的产品开发管理模式,旨在通过整合各种资源,实现产品开发的高效、协同与创新。在这一流程管理体系下,产品质量保障成为企业关注的核心要点之一。有效的产品质量保障策略不仅能够提升产品的市场竞争力,还能为企业赢得良好的声誉和客户忠诚度。接下...
华为IPD   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用