print"和"return"之间的正式区别是什么?

29 投票
6 回答
120213 浏览
提问于 2025-04-17 03:44

假设我定义了一个简单的函数,它会显示传给它的一个整数:

def funct1(param1):
    print(param1)
    return(param1)

输出结果是一样的,但我知道当在函数中使用了return语句时,输出的结果可以再次使用。否则,print语句的值就不能再用了。不过我知道这并不是正式的定义,有人能给我一个好的定义吗?

6 个回答

6

这是一个简单的例子,用来展示两者之间的区别:

def foo():
    print (5)

def bar():
    return 7

x = foo() 
y = bar()

print (x) 
# will show "None" because foo() does not return a value
print (y) 
# will show "7" because "7" was output from the bar() function by the return statement.
8

使用 print() 这个命令,你可以把 param1 的值显示出来,直接在屏幕上看到。而使用 return 命令,则是把 param1 的值传递给调用这个函数的地方。

这两种写法的意思完全不同,所以你不会看到相同的效果。如果你把整个程序发出来,我可以更容易地帮你指出它们的区别。

补充:正如其他人提到的,如果你在一个交互式的 Python 环境中,你会看到相同的效果(值会被打印出来),但这是因为这个环境会计算表达式并显示结果。

在这种情况下,带有 return 的函数会被当作 return 自身的参数来计算,所以返回的值会被显示出来。不要被这个交互式环境给迷惑了哦! :)

42

这两者是完全不同的东西。想象一下,如果我有这样一个Python程序:

#!/usr/bin/env python

def printAndReturnNothing():
    x = "hello"
    print(x)

def printAndReturn():
    x = "hello"
    print(x)
    return x

def main():
    ret = printAndReturn()
    other = printAndReturnNothing()

    print("ret is: %s" % ret)
    print("other is: %s" % other)

if __name__ == "__main__":
    main()

你觉得输出会是什么呢?

hello
hello
ret is : hello
other is: None

为什么?

为什么呢?因为 print 会把它的参数/表达式输出到标准输出,所以在我写的这些函数里,print 会输出 x 的值,也就是 hello

  • printAndReturn 会把 x 返回给调用这个方法的地方,所以:

    ret = printAndReturn()

ret 的值会和 x 一样,也就是 "hello"

  • printAndReturnNothing 不会返回任何东西,所以:

    other = printAndReturnNothing()

other 实际上会变成 None,因为这是Python函数默认的返回值。Python函数总是会返回一些东西,但如果没有声明 return,函数就会返回 None


资源

通过Python教程,你可以了解这些概念: http://docs.python.org/tutorial

这里有关于函数的内容,来自Python的教程: http://docs.python.org/tutorial/controlflow.html#defining-functions

这个例子像往常一样,展示了一些新的Python特性:

返回语句可以从函数中返回一个值。如果没有表达式参数的 return,则返回 None。函数结束时也会返回 None

撰写回答