print()函数的有趣/奇怪的力学

时间:2017-04-19 07:15:46

标签: python python-3.x

我正在学习python。我目前正在学习如何定义自己的函数,我在尝试理解返回值和打印它之间的区别时遇到了一些困难。我读到的关于这个主题的描述对我来说并不是那么清楚,所以我开始自己进行实验,我想我现在已经得到了它。如果我没有错,那么区别在于您可以将return表达式的值作为参数传递给另一个函数,而不能使用print()函数的值来执行此操作。在进行实验时,我遇到了一些意想不到的输出。

我做的第一件事就是在Python Interpreter中编写以下代码:

>>>print(print('hello'))

输出结果为:

  

您好

     

这让我相信以下内容:首先执行print('hello')函数,然后显示文本hello。然后表达式print(print('hello))求值为None,因为您不能将print()函数用作另一个函数的参数。到目前为止一切都很好。

我输入的下一个代码是:

>>>a = print('hello')

在为变量赋值时,通常不希望输出,但在这种情况下输出为:

  

您好

这就是我的想法:print('hello')表达式被执行并输出文本hello。然后print('hello')表达式存储在变量a中。

所以这导致我进入了我输入的最后一行代码:

>>>print(a)

基于之前的输出,我希望此代码提供以下输出:

  

您好

     

因为变量a将替换为print('hello'),然后您将获得与第一个相同的表达式,即:print(print('hello'))

但事实并非如此。实际输出只是:

  

现在我有几个悬而未决的问题:

  1. 为什么最后一段代码的输出只是None
  2. 如果你不能在另一个print()函数中放入print()函数,为什么输出None?为什么它没有给你一个错误信息?
  3. 我的任何假设都是错误的(包括关于returnprint之间差异的假设吗?)
  4. 我知道我的帖子太长了,但是我喜欢给出整个背景,所以帮助者可能会知道我的情况,也许会调整他们帮助最好地适应这种情况的方式。

    提前致谢!

1 个答案:

答案 0 :(得分:7)

  

然后print('hello')表达式存储在变量a

不,变量a不包含表达式。通常,您不能将表达式赋给变量。实际发生的是您将表达式的结果分配给变量。微妙的差异,但非常重要。

Python中的每个函数都返回一些东西。如果你写

>>> a = fn()

然后您在a中存储调用fn的结果,而不是表达式fn()。例如,如果

def fn():
    return 1

然后a现在是1。恰好print函数返回None

另一方面,print功能具有副作用。副作用是它将你传递给它的任何内容推送到标准输出(如果你不熟悉sys然后到sys.stdout)。它"打印"。

让我们分析一下你的例子:

>>> a = print('hello')

会发生什么:print('hello')被调用。副作用触发:hello被发送到屏幕。然后调用print的结果存储在a None中。做

>>> print(a)

只需打印None即可,因为a现在是什么。