我需要使用在一个函数中创建的变量作为另一个函数中的参数/参数。我不知道如何在不收到连续错误信号的情况下执行此操作,因为我每 10 毫秒重复一次该函数。这是代码:
def addFish():
x = createRandomX()
y = createRandomY()
Dx = createRandomDx()
Dy = createRandomDy()
fish = canvas.create_image(x, y, image = fishRight)
updateFish(x, y, Dx, Dy, fish)
return x, y, Dx, Dy, fish
fishButton = Button(root, text = "Add a fish", command = addFish)
fishButton.grid(row = 1, column = 0)
def updateFish(x, y, Dx, Dy, fish):
#global x, y, Dx, Dy, fish
canvas.coords(fish, x , y )
x = x + Dx
y = y + Dy
if x < 0 or x > 500:
Dx = Dx * -1
if y < 0 or y > 500:
Dy = Dy * -1
if Dx == 1:
canvas.itemconfig(fish, image=fishRight)
if Dx == -1:
canvas.itemconfig(fish, image=fishLeft)
canvas.after(10, updateFish(x, y, Dx, Dy, fish))
updateFish(x, y, Dx, Dy, fish)
root.mainloop()
所以,当我这样做时,我收到 x 未定义的错误。这是因为当我调用 updateFish 时,第一个参数 x 不是全局变量,它只是 addFish() 的局部变量。因此,我需要知道如何能够使用 addFish() 中的变量作为函数 updateFish 中的参数。
我正在为类构建一个鱼缸,让鱼不断地弹跳,但我需要 updateFish 函数来为我添加的所有鱼工作 - 因此它需要成为函数中的参数。
最佳答案
问题是所有值都是按值传递的,因此在函数中更改它们不会更新函数调用中的原始变量:
>>> def test (x):
x = x * 10
>>> x = 20
>>> test(x)
>>> x
20
如果你想保持多条鱼的状态,我建议你创建一个鱼类型:
class Fish (object):
def __init__ (self, x, y, dx, dy, canvas):
self.x = x
self.y = y
self.dx = dx
self.dy = dy
self.canvas = canvas
self.image = canvas.create_image(x, y, image=fishRight)
然后,您可以使用Fish(x, y, dx, dy, canvas)
创建一条鱼,并拥有一个可以通过引用传递的对象。更改该对象的值将更新全局值。
然后,您还可以将一些函数作为方法移动到类中。例如。 updateFish
方法可能很适合该类。
关于Python如何在另一个函数中使用局部变量作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891042/