
Python 函数中的 return 语句不会自动将结果赋值给同名变量;必须显式接收返回值,否则函数输出会被丢弃,导致变量未定义错误。
python 函数中的 `return` 语句不会自动将结果赋值给同名变量;必须显式接收返回值,否则函数输出会被丢弃,导致变量未定义错误。
在你的代码中,trajectory() 函数确实正确地通过 return x, y 返回了两个列表,但问题出在调用函数后未接收返回值:
trajectory(x_0, y_0, theta_0, v_0, r) # ✅ 执行了函数,但返回值被直接丢弃 print(x) # ❌ 报错:NameError: name 'x' is not defined
这是因为 Python 中函数作用域是独立的:函数内部定义的变量(如 x, y)仅在其局部作用域内有效,不会“泄漏”到外部。return 只是把值传出,而你需要用赋值语句接住它。
✅ 正确做法是:
x, y = trajectory(x_0, y_0, theta_0, v_0, r) # ✅ 解包接收返回的两个列表 print(x) # 现在可以正常访问
? 提示:return x, y 实际返回的是一个元组 (x, y),Python 支持序列解包(sequence unpacking),因此 x, y = ... 会自动将元组首尾元素分别赋给左侧变量。
立即学习“Python免费学习笔记(深入)”;
⚠️ 注意事项:
- 若只写 trajectory(...) 而不赋值,返回值会被计算但立即丢弃,等价于 None(即使你 return x, y,不接收就毫无意义);
- 不要误以为函数内变量名会“自动创建”同名全局变量——这是常见误区;
- 若需后续绘图,可直接使用:
import matplotlib.pyplot as plt x, y = trajectory(x_0, y_0, theta_0, v_0, r) plt.plot(x, y) plt.xlabel("Horizontal position (m)") plt.ylabel("Vertical position (m)") plt.title("Frisbee Trajectory") plt.show()
总结:return 是“发送”,不是“设置”;函数调用必须配合赋值才能获取结果。养成习惯:每次调用有返回值的函数,都要明确写出接收变量——这是编写健壮、可维护 Python 代码的基本功。


















