Python调用函数传参时出现NameError: name 'bob' is not defined的问题
解决Python Turtle函数调用的NameError问题
错误原因分析
你的代码存在两个核心问题:
- 变量未定义:调用
square(bob)时,bob这个变量从未被创建过,Python找不到它,因此抛出NameError。 - 参数被覆盖:函数内部的
t = turtle.Turtle()语句直接覆盖了传入的参数t,导致你传入的参数完全没用上,违背了“接收turtle类型参数”的设计初衷。
你对参数传递的理解有误:函数参数的作用是接收已存在的变量/对象,而不是让函数替你创建这个变量。你以为“bob替换函数中的t等同于执行bob = turtle.Turtle()”是错误的逻辑,必须先在外部创建turtle实例,才能将其传入函数。
修正后的代码
import turtle def square(t): # 直接使用传入的turtle实例,不再重新赋值 for i in range(4): t.fd(100) t.lt(90) # 先创建turtle实例bob bob = turtle.Turtle() # 将bob传入square函数 square(bob) # 保持绘图窗口显示,避免程序结束后直接关闭 turtle.done()
关键说明
- 先在函数外部通过
bob = turtle.Turtle()创建turtle实例,确保bob是已定义的变量,才能作为参数传入函数。 - 函数内部直接使用参数
t调用绘图方法,这样传入的turtle实例才会被用来绘制正方形,符合你最初的设计需求。
内容的提问来源于stack exchange,提问作者J. Hawker
相关产品推荐
相关产品推荐

