如何返回函数的输出与打印不同?

时间:2009-04-15 02:53:39

标签: python return

在我之前的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之间有什么区别?

10 个答案:

答案 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'