Python return 和 print:一文搞懂它们的本质区别与正确用法(新手必看)**

刚学Python的你,是否也曾对 return 和 print 感到困惑?明明都能在屏幕上看到输出,为什么有时候一个能用,另一个却不行?本文将通过生动的比喻和丰富的代码示例,彻底揭开 return 和 print 的神秘面纱,让你明白它们在Python编程中的真正角色,写出更专业、更高效的代码,无论你是准备面试还是日常开发,这都是一篇你不能错过的深度指南。
引言:一个常见的“坑”
我们先来看一个场景,很多Python初学者都会在这里“栽跟头”:
# 场景一:使用 print
def add_print(a, b):
result = a + b
print(f"计算结果是: {result}")
# 调用函数
sum1 = add_print(3, 5)
print(f"sum1 的值是: {sum1}")
输出结果:
计算结果是: 8
sum1 的值是: None
咦? 为什么 sum1 的值是 None 而不是 8?我明明在函数里用 print 输出了结果啊!

我们再换一个场景:
# 场景二:使用 return
def add_return(a, b):
result = a + b
return result
# 调用函数
sum2 = add_return(3, 5)
print(f"sum2 的值是: {sum2}")
输出结果:
sum2 的值是: 8
这次,sum2 正确地获得了值 8。
这两个简单的例子,直击了 print 和 return 的核心区别,下面,我们来彻底搞懂它们。

print:程序的“嘴巴”——负责展示
你可以把 print 函数想象成程序的“嘴巴”,它的唯一职责就是把你给它的东西(变量、字符串、数字等)“说”出来,显示在控制台(屏幕)上。
核心特点:
- 副作用:
print的作用是产生“副作用”(Side Effect),即与程序外部进行交互(向屏幕输出),它本身不参与计算流程。 - 没有返回值:
print函数在执行完任务后,会默默地返回一个特殊的值——None,这意味着它本身不“携带”任何有用的数据返回给调用者。 - 主要用于调试和用户交互:在开发阶段,我们用它来检查变量的值;在程序运行时,我们用它给用户展示信息。
代码示例:
# 1. 调试信息
user_name = "Alice"
print(f"当前正在处理用户: {user_name}") # 用于调试,告诉开发者程序运行到这里了
# 2. 用户交互
print("欢迎来到我们的程序!")
age = input("请输入您的年龄: ")
print(f"您输入的年龄是: {age}")
# 3. 打印结果(但不保存)
print("1 + 1 =", 1 + 1) # 直接展示,无法后续使用这个结果
当你只是想让别人(或者未来的自己)看到某个信息时,用 print。
return:函数的“信使”——负责传递
你可以把 return 语句想象成函数的“信使”,当一个函数完成任务后,它会通过 return 这个信使,把计算结果(或者任何你指定的数据)“打包”好,传递给调用这个函数的地方。
核心特点:
- 数据返回:
return的核心功能是返回一个值,这个值可以是数字、字符串、列表、字典,甚至是另一个函数。 - 终止函数:
return语句一旦执行,函数会立即停止执行,并将控制权连同返回值一并交还给调用者。 - 构建程序逻辑的基石:
return是函数式编程的精髓,没有return,函数就无法将计算结果融入更大的程序逻辑中,代码将变得支离破碎。
代码示例:
# 1. 返回计算结果,供后续使用
def multiply(x, y):
return x * y
area = multiply(5, 6) # 30 被返回并赋值给 area
print(f"计算出的面积是: {area}")
# 2. 根据条件返回不同的值
def is_adult(age):
if age >= 18:
return True
else:
return False
can_vote = is_adult(20)
if can_vote:
print("此人已成年,可以投票。")
else:
print("此人未成年,不可投票。")
# 3. 返回多个值(本质是返回一个元组)
def get_user_info():
name = "Bob"
age = 30
return name, age # 返回一个元组: ("Bob", 30)
user_name, user_age = get_user_info()
print(f"用户名: {user_name}, 年龄: {user_age}")
当一个函数的计算结果需要被其他部分代码使用时,必须用 return。
核心区别对比:一张图看懂
| 特性 | print() |
return |
|---|---|---|
| 核心功能 | 在控制台显示信息 | 返回一个值给调用者 |
| 比喻 | 程序的“嘴巴” | 函数的“信使” |
| 是否终止函数 | 否,函数会继续执行 | 是,遇到 return 函数立即结束 |
| 返回值 | 始终返回 None |
返回你指定的任何数据 |
| 主要用途 | 调试、日志、用户交互 | 数据传递、逻辑构建、函数组合 |
| 能否被变量接收 | 不能(变量会得到 None) |
可以 |
实战演练:何时用 print,何时用 return?
案例:编写一个函数,判断一个数是否为素数。
错误示范:只用 print
def check_prime_print(n):
if n <= 1:
print(f"{n} 不是素数。")
return # 如果不写return,函数会继续执行下面的逻辑
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
print(f"{n} 不是素数。")
return
print(f"{n} 是素数。")
# 调用
check_prime_print(17) # 输出: 17 是素数。
check_prime_print(15) # 输出: 15 不是素数。
# 想把结果用在条件判断里?不行!
if check_prime_print(17): # check_prime_print(17) 返回的是 None
print("这个数很特殊!") # 这行代码永远不会执行
这个函数虽然能打印结果,但无法被其他逻辑复用,因为它不返回任何有用的布尔值。
正确示范:用 return
def check_prime_return(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 调用
is_17_prime = check_prime_return(17)
is_15_prime = check_prime_return(15)
print(f"17是素数吗? {is_17_prime}") # 输出: 17是素数? True
print(f"15是素数吗? {is_15_prime}") # 输出: 15是素数? False
# 可以完美地用在条件判断中
if check_prime_return(17):
print("17 是一个素数,很特殊!") # 输出: 17 是一个素数,很特殊!
这个版本才是专业和可复用的。return 将判断结果 True 或 False 传递出来,让调用者可以自由决定如何处理这个结果。
总结与最佳实践
通过以上的剖析,我们可以得出清晰的结论:
print是为了“看”:它的作用是输出,让信息在屏幕上可见,主要用于调试、展示给用户,或记录日志,它不参与程序的内部数据流。return是为了“用”:它的作用是返回,将函数的计算结果作为数据传递出去,供程序的其它部分使用,它是构建模块化、可复用代码的基石。
给初学者的最佳实践:
- 函数设计原则:一个函数应该有单一、明确的职责,如果一个函数的主要任务是计算并返回一个结果,那么它就应该使用
return,而不是用print来“展示”这个结果。 - 调试时用
print:在写代码时,不确定变量值是多少?用print打印出来看看,这是最直接的调试方法,代码调通后,可以逐步移除或替换掉这些调试用的print。 - 用户交互时用
print:当需要向用户展示欢迎信息、操作提示或最终结果时,print是不二之选。 - 构建逻辑时用
return:当函数的输出需要成为另一个函数的输入,或者需要被if语句、for循环等控制结构处理时,必须使用return。
记住这个黄金法则:
如果你想让别人(屏幕)看到它,用
return。
掌握 return 和 print 的区别,是Python学习道路上的一个重要里程碑,希望这篇文章能帮你彻底理解它们,告别混乱,写出更加清晰、专业的Python代码!
