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

I. *_*wib 0 python python-3.x

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

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

>>>print(print('hello'))
Run Code Online (Sandbox Code Playgroud)

输出是:

你好

没有

这使我相信以下内容:print('hello')首先执行函数并hello显示文本.然后表达式print(print('hello))求值,None因为你不能使用print()函数作为另一个函数的参数.到现在为止还挺好.

我输入的下一个代码是:

>>>a = print('hello')
Run Code Online (Sandbox Code Playgroud)

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

你好

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

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

>>>print(a)
Run Code Online (Sandbox Code Playgroud)

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

你好

没有

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

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

没有

现在我有几个未解答的问题:

  1. 为什么最后一个代码的输出只是None
  2. 如果你不能将print()函数放在另一个print()函数中,为什么输出None?为什么它不会给你一个错误信息?
  3. 是否有任何我的假设的错误(包括一个约之间的区别returnprint)?

我知道我的帖子太长了,但我喜欢给出整个背景,所以帮助者可能会知道我的情况,也许会调整他们帮助最好地适应这种情况的方式.

提前致谢!

fre*_*ish 7

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

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

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

>>> a = fn()
Run Code Online (Sandbox Code Playgroud)

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

def fn():
    return 1
Run Code Online (Sandbox Code Playgroud)

a就是现在1.只是print函数返回None.

另一方面,print功能有副作用.副作用是,它推动无论你传递给它的标准输出(如果你不惹sys然后sys.stdout).它"打印".

所以让我们分析你的例子:

>>> a = print('hello')
Run Code Online (Sandbox Code Playgroud)

会发生什么:print('hello')被叫.副作用引发:hello发送到屏幕.然后调用的结果print存储在a其中None.干

>>> print(a)
Run Code Online (Sandbox Code Playgroud)

只是印刷,None因为这a是现在的.