Processing Python中使用List时draw函数无法运行的问题求助
Processing Python模式中draw函数无法运行的解决办法
问题出在变量作用域上:你在setup()函数内部定义的balls是局部变量,draw()函数根本访问不到它,这才导致程序报错,和列表索引操作本身无关。
修复方案
有两种方式解决跨函数的变量共享问题:
方式1:全局作用域定义列表
直接在所有函数外部声明balls变量,让它成为全局变量:
class Ball(object): def __init__(self,x,y): self.x = x # 修正:使用传入的x参数初始化,而非固定为0 self.y = y # 修正:使用传入的y参数初始化,而非固定为0 balls = [] # 全局作用域定义列表 def setup(): size(500,500) background(255) # 两种存储方式二选一即可 # balls.append(Ball(0,0)) balls.append([0,0]) def draw(): background(255) for b in balls: fill(0) # 如果用Ball类,这里要改成 circle(b.x, b.y, 20) circle(b[0],b[1],20)
方式2:用global关键字声明全局变量
在需要操作balls的函数内部,用global关键字明确声明要使用全局变量:
class Ball(object): def __init__(self,x,y): self.x = x self.y = y def setup(): global balls # 声明要使用全局的balls变量 size(500,500) background(255) balls = list() # balls.append(Ball(0,0)) balls.append([0,0]) def draw(): global balls # 同样声明全局变量 background(255) for b in balls: fill(0) circle(b[0],b[1],20)
额外提示
你的Ball类构造方法原本没有使用传入的x、y参数,而是固定赋值为0,这会导致即使调用Ball(100,100),球的位置还是(0,0),建议改成上述代码中的写法来正确初始化位置。
内容的提问来源于stack exchange,提问作者user27161342
相关产品推荐
相关产品推荐

