2012-06-09 60 views
1

我认为我对功能如何工作以及如何将它们分配给变量有了很好的理解。然而,我只是看了几个月前阅读的一些Learn Python Hard Way练习(最着名的练习21),并注意到了关于解释器输出的一些有趣的事情。输出:功能与功能分配到变量

def add(a, b): 
    print "ADDING %d + %d" % (a, b) 
    return a + b 

输出:

>>> add(30, 5) 
ADDING 30 + 5 
35 

为什么这个节目35?你不应该写“打印添加(30,5)”来显示返回值吗?

>>> age = add(30, 5) 
ADDING 30 + 5 

>>> age 
35 

变量赋值看起来像是调用函数和输出打印语句,并没有返回值...但变量本身显示值35,为什么不变量赋值一样吗?

我希望这些问题有意义。我只是试图更好地了解幕后发生的事情。如果有人有任何外部阅读,让我知道!

回答

5

这是因为交互式解释器会显示您键入的任何表达式的返回值。

您发布的功能有两行。在第一行中,它是标准输出的值。第二个return是功能相同的值。正如我上面所述,这也被写入到交互式解释器的标准输出中。

如果你是通过命令行(运行脚本即不是在交互式解释

python myscript.py 

你会发现,这个返回值不再打印到标准输出

+0

啊,说得通。 – bmay2

0

添加都打印看到:print "ADDING %d + %d" % (a, b) 并返回整数(仅整数)看到:return a + b

它总是打印 “ADDING X + Y”,想不想要。

如果您分配的功能给一个变量,让CAL它变种,然后VAR将有整数而已(这正是增加收益)。

1

你在交互式Python提示符下这样做,为了您的方便,它总是打印最后一个结果,而不要求它这样做。否则,你必须始终输入print,这将会变老快速。

在一个合适的脚本中,Python不会那样做。

+2

说“它打印最后的结果”是有点误导,因为解释器将输出_all_表达式的返回值,它们不会评估为“无”,而不仅仅是输入的最后一个。例如:>>>对于范围(10)中的我:\ n ... i + 10 \ n ... i + 5 \ n'。 –

+1

哇,真的吗?我从来没有尝试过。学到了新东西! – kindall