首页 > 解决方案 > blockmanage() 接受 1 个位置参数,但在将数组提供给函数时给出了 36 个

问题描述

我正在学习 pygame 并且遇到了麻烦“给予”(对不起,我不确定正确的术语)一个数组。它说它只接受一个位置参数——下面的完全错误——它显然不喜欢我给它一个大数组。我花了几个小时试图让线程为此工作并解决了到目前为止的所有问题,但我不确定从哪里开始。

我真的不知道从哪里开始,只需要一个关于如何纠正错误的简单指针。我尝试将 args=blocks 代码更改为 args=blocks[]。

def blockmanage(blocks):
        for block in blocks:
            #make a rectangle around ball and block and if they collide continue
            if pygame.Rect(block.x, block.y, 50, 20).colliderect(self.x - 10, self.y -10, 20, 20):
                #reverse ball direction
                self.dy *= -1

                #remove the block being iterated through.
                blocks.remove(block)

blocks = []

for y in range(50, 350, 50):
    for x in range(25, 360, 60):
        blocks.append(Block(x, y, colours[i]))
        i += 1

thread1 = threading.Thread(target = blockmanage, args=(blocks))
thread1.start()

预期的结果是它接受数组作为参数。

标签: python

解决方案


参数的值args被视为要传递给目标函数的所有参数的列表,因此每个元素都blocks被视为一个单独的参数。您需要将其包装在另一个列表中。

thread1 = threading.Thread(target = blockmanage, args=[blocks])

推荐阅读