本文详解初学者常犯的缩进与返回值错误:return 语句位置不当会导致函数仅在特定条件下返回结果,其余情况默认返回 None;通过修正缩进和理解函数执行流程,可稳定输出三个输入数中的最大值。
本文详解初学者常犯的缩进与返回值错误:`return` 语句位置不当会导致函数仅在特定条件下返回结果,其余情况默认返回 `none`;通过修正缩进和理解函数执行流程,可稳定输出三个输入数中的最大值。
在使用 Python 编写 max_of_three(x, y, z) 这类基础函数时,一个极其常见却容易被忽略的问题是 return 语句的缩进层级。你提供的代码中,return max 被错误地嵌套在了 if z > max: 的代码块内:
def max_of_three(x, y, z):
max = x
if y > max:
max = y
if z > max:
max = z
return max # ❌ 错误:只在 z 最大时才执行 return这导致函数行为不可预测:
- 当 z 是最大值(如 max_of_three(1, -1, 3)),return 执行 → 输出 3 ✅
- 当 y 是最大值(如 max_of_three(1, 4, 2)),z > max 不成立 → return 被跳过 → 函数自然结束 → 返回 None ❌
- 当 x 是最大值或存在并列最大(如 max_of_three(1, 2, 2)),同样不会触发 return → 返回 None ❌
✅ 正确做法是让 return max 作为函数的最终统一出口,与所有条件判断同级(即与 if 并列),确保无论哪个分支被执行,函数都一定会返回计算结果:
def max_of_three(x, y, z):
max_val = x # 使用更清晰的变量名,避免覆盖内置 max()
if y > max_val:
max_val = y
if z > max_val:
max_val = z
return max_val # ✅ 正确:始终执行,位于函数末尾且无缩进偏差
# 测试调用
first_result = max_of_three(1, -1, 3)
print(first_result) # 输出: 3
second_result = max_of_three(1, 4, 2)
print(second_result) # 输出: 4
third_result = max_of_three(1, 2, 2)
print(third_result) # 输出: 2? 关键注意事项:
- return 必须顶格对齐到函数体层级(与 if 同级),而非嵌套在某个条件内部;
- 避免使用 max 作为变量名——它会遮蔽 Python 内置函数 max(),影响后续代码可维护性;推荐用 max_val、largest 等语义化名称;
- Python 函数若无显式 return,默认返回 None,这是本例输出 None 的根本原因;
- 进阶建议:可直接用内置函数 max(x, y, z) 实现等效逻辑,但手动实现有助于理解控制流与变量作用域。
掌握这一缩进与返回逻辑,是你迈向稳健函数设计的重要一步。

















