return语句的作用是什么?与打印有什么不同?

108 投票
15 回答
706116 浏览
提问于 2025-04-16 23:59

return语句的作用是什么?在Python中应该怎么使用它?

returnprint有什么不同?


另见

很多人会在函数里用print来循环输出多个值,想要在外部使用这些结果。其实这些结果需要用return返回,但return第一次执行时就会退出函数。可以参考我怎么才能用`return`从循环中返回多个值?可以把它们放在一个列表里吗?

初学者常常会写一个函数,最后用print输出某个东西,而不是用return返回,然后又试图去print这个结果,结果却意外地输出了None。可以参考为什么我的函数输出后会打印"None"?

在Python 3.x中,有时人们会试图把print的结果赋值给一个变量,或者在其他表达式中使用它,比如input(print('prompt:'))。在3.x中,print是一个函数,所以这不是语法错误,但它返回的是None而不是显示的内容。可以参考为什么print函数返回None?

有时人们会写代码,试图从一个递归调用中print结果,而不是正确地用return返回。就像只是调用这个函数一样,这样做无法将值通过递归传递回来。可以参考为什么我的递归函数返回None?

可以考虑查看我怎么从一个函数中得到结果(输出)?我怎么能在之后使用这个结果?,这个问题主要是关于如何使用 return,而不涉及print

15 个回答

24

我觉得这里最好的参考就是字典

返回打印

简单来说:

返回是指把某个东西交还给调用这个函数的人,而打印是指输出文本

27

把打印语句想象成一种副作用,它让你的函数把一些文字输出给用户,但这个输出不能被其他函数使用。

我会通过一些例子和维基百科上的几个定义来更好地解释这个概念。

这是维基百科对函数的定义:

在数学中,函数将一个量(函数的参数,也称为输入)与另一个量(函数的值,也称为输出)关联起来。

想一想,这句话是什么意思?当你说一个函数有值时,这意味着什么呢?

这意味着你实际上可以用一个普通的值来替代函数的值!(前提是这两个值是同类型的)

你可能会问,为什么要这样做呢?

那其他函数可能也接受同类型的值作为输入呢?

def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

有一个很酷的数学术语来描述那些只依赖输入来产生输出的函数:可引用透明性。再一次,来自维基百科的定义。

可引用透明性和可引用不透明性是计算机程序某些部分的特性。如果一个表达式可以用它的值替换而不改变程序的行为,那么这个表达式就被称为可引用透明。

如果你刚接触编程,这个概念可能有点难以理解,但我相信你经过一些实验后会明白的。一般来说,你可以在一个函数中使用打印,也可以在最后有一个返回语句。

只要记住,当你使用返回时,你基本上是在说“调用这个函数就等于写出返回的值”。

如果你不自己提供返回值,Python会自动为你插入一个返回值,这个值叫做“None”,它是一种特殊的类型,表示什么都没有,或者说是空值。

110

print() 函数的作用是把一段文字“打印”到控制台上。return 语句则是让你的函数结束,并把一个值返回给调用它的地方。函数的主要目的就是接收输入,然后返回一些东西。当函数准备好要返回一个值时,就会用到 return 语句。

比如,下面这个函数同时使用了 print()return

def foo():
    print("hello from inside of foo")
    return 1

现在你可以运行调用 foo 的代码,像这样:

if __name__ == '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned " + str(x))

如果你把这个作为脚本运行(比如一个 .py 文件),而不是在 Python 解释器里运行,你会看到以下输出:

going to call foo
hello from inside foo
called foo   
foo returned 1

希望这样能让你更明白。解释器会把返回值写到控制台上,所以我能理解为什么有人会感到困惑。

这里还有一个来自解释器的例子,展示了这一点:

>>> def foo():
...     print("hello within foo")
...     return 1
...
>>> foo()
hello within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello within foo
10

你可以看到,当 foo()bar() 被调用时,1 并没有被写到控制台上。相反,它是用来计算从 bar() 返回的值。

print() 是一个会产生副作用的函数(它会在控制台上写一段文字),但执行会继续进行到下一条语句。而 return 则会让函数停止执行,并把一个值返回给调用它的地方。

撰写回答