在Python里,让函数拿出一个具体的值交给调用者,最核心的做法就是使用return语句。很多刚写函数的人习惯在函数体里用print把结果输出到控制台,但那样只是显示,外部代码根本接不住这个数。return才是把数据从函数内部递出来的正式出口,一旦解释器运行到它,函数立刻结束,并把紧跟其后的表达式结果作为本次调用的产物返回。

一、return语句的基本写法
最简单的单值返回,就是在函数体中写一行return后面跟一个具体的值或者变量。这个值可以是整数、浮点数、字符串,也可以是后面算出来的某个局部变量。下面这段例子演示了如何返回一个整数类型的计算结果:
def add_one(num):
result = num + 1
return result
value = add_one(5)
print(value)
上面代码中,add_one函数接收参数num,在内部算出result之后通过return result把加一之后的值交回去。调用处的value就接到了6,后续可以拿去做任何其他事,比如再运算或者存库。如果不写return,value就会是None,那是Python里表示空对象的默认返回。
return后面不一定非要是已存在的变量,直接写表达式也完全合法。例如return num + 1效果和前面分开写是一样的。解释器会先算好表达式的值,再把它带出函数。这种写法在逻辑简短时更紧凑,也更容易一眼看清函数产出什么。
二、返回不同基础类型的单值
Python是动态类型语言,return出的具体值类型不需要提前声明。你可以返回字符串,也可以返回布尔值。下面的例子展示返回字符串与布尔值的情形:
def get_grade(score):
if score >= 60:
return '及格'
else:
return '不及格'
def is_adult(age):
return age >= 18
print(get_grade(75))
print(is_adult(20))
在get_grade里,根据分数高低返回不同的文字串,调用方拿到就能直接展示。is_adult则返回一个布尔值,这种写法常出现在条件判断较多的工具函数里。注意两个分支都有return,这样无论走哪条路函数都能交出明确的值,不会 silently 落到None。
有些新手会在if分支里写了return,但忘了else也写,导致某些输入下函数自然结束而没有返回语句,最终拿到None。单值返回的函数最好保证所有逻辑路径都有明确的return,或者末尾补一个默认return,避免调用方收到意外空值。
三、print与return的本质区别
初学者最容易混淆的就是打印和返回。print只是把内容写到标准输出,函数本身并没有把数据交出来;return才是数据传递机制。看下面对比:
def by_print(x):
print(x * 2)
def by_return(x):
return x * 2
a = by_print(3)
b = by_return(3)
print('a的值是', a)
print('b的值是', b)
运行后控制台会先看到by_print打出的6,但a接收到的是None,因为by_print没写return。b则正经拿到了6。如果你写代码是为了给别的模块提供数据,就必须用return;只有单纯想让人看见运行结果时才用print。实际项目里,函数通常返回数据,打印交给上层统一日志处理。
另外,return之后函数内后面的代码都不会执行,这一点和print完全不同。比如写错成先print再return,或者return后还放逻辑,后者永远不会跑。理清这个边界,才能写出可控的函数流程。
四、常见错误与排查思路
当发现函数没返回预期的具体值时,优先检查三处:是否漏写return、是否在循环或条件里提前返回导致某些情况没覆盖、是否把return写成了print。下面列出典型误写:
def wrong(x):
x * 2
def right(x):
return x * 2
print('wrong结果', wrong(4))
print('right结果', right(4))
wrong函数里只写了表达式却没有return,等于算了没交,拿到的是None。right加上return就正常了。调试时可在调用处打印类型与值,若类型是NoneType就往上述三点去查。养成写函数时先想清楚“它要交回什么”的习惯,比事后排查更高效。
还有一种情况是return后面跟了多个用逗号隔开的值,那样实际返回的是一个元组,不属于单值返回。如果标题要求的就是单值,请务必保证return后只有一个表达式,不要顺手写成return a, b。明确目标产出形态,代码才不容易变形。
五、小结
让Python函数返回具体单值,手段非常直接:在函数体合适位置写return加目标值。它适用于所有基础类型,也是打印之外真正打通数据流的必需动作。区分清return与print,扫掉漏写和分支遗漏,就能稳定拿到函数算出的那个值。
把return理解为函数的出口与交货口,比把它当成某种修饰符更贴切。每次封装函数时先定下返回什么,再填内部逻辑,写出来的代码通常更清晰,也更好测。