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

2024-11-28 08:38:00
admin
原创
13
摘要:问题描述:在我之前的问题中,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'
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   657  
  如何借鉴华为IPD体系优化企业研发?在当今竞争激烈的市场环境中,企业要想保持技术领先和产品竞争力,必须拥有一套高效且严谨的研发管理体系。华为作为全球领先的ICT解决方案提供商,其集成产品开发(IPD, Integrated Product Development)体系与质量管理体系(如ISO 9000系列)的融合实践,...
IPD项目管理   15  
  IPD流程图的7种经典绘制方法详解在产品开发领域,集成产品开发(Integrated Product Development,简称IPD)流程被广泛应用,以提高产品开发的效率和质量。IPD流程图作为这一流程的可视化工具,其绘制方法至关重要。本文将详细介绍七种经典的IPD流程图绘制方法,帮助项目管理人员和团队更好地理解和...
IPD研发管理体系   18  
  IPD流程:企业创新管理的核心引擎在当今快速变化的市场环境中,企业要想持续保持竞争力,就必须不断进行创新。而IPD(Integrated Product Development,集成产品开发)流程作为一种先进的产品开发管理模式,正逐渐成为众多企业提升创新能力、加速产品上市速度、降低开发成本的重要选择。本文将深入探讨IP...
IPD管理   18  
  IPD流程与传统产品开发流程的概述在产品开发领域,企业不断寻求高效、系统的管理方法以确保产品能够顺利从概念转化为市场成功的产品。集成产品开发(Integrated Product Development,简称IPD)流程与传统产品开发流程是两种截然不同的管理理念和方法。传统产品开发流程往往以职能部门为核心,各部门按顺序...
IPD流程中PDCP是什么意思   16  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用