我正在学习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'))
。
但事实并非如此。实际输出只是:
无
现在我有几个悬而未决的问题:
None
?None
?为什么它没有给你一个错误信息?return
和print
之间差异的假设吗?)我知道我的帖子太长了,但是我喜欢给出整个背景,所以帮助者可能会知道我的情况,也许会调整他们帮助最好地适应这种情况的方式。
提前致谢!
答案 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
现在是什么。