You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:37:34