gpt4 book ai didi

Python:为什么添加参数后方法的行为会有所不同?

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:22 25 4
gpt4 key购买 nike

我在 Pygame Sprite 子类中有一个方法,定义如下:

def walk(self):
"""move across screen"""
displacement = self.rect.move((self.move, 0))
if self.rect.left < self.area.left or self.rect.right > self.area.right:
self.move = -self.move
displacement = self.rect.move((self.move, 0))
self.rect = displacement

我修改了一下,加了一个参数speed_x,现在程序坏了。

def walk(self, speed_x):
"""move across screen"""
displacement = self.rect.move((speed_x, 0))
if self.rect.left < self.area.left or self.rect.right > self.area.right:
speed_x = -speed_x
displacement = self.rect.move((speed_x, 0))
self.rect = displacement

在我这样调用方法之前:

def update(self):
self.walk()

现在我这样做了:

def update(self):
self.walk(self.move)

为什么这行不通?

最佳答案

您没有解释它是如何“损坏”的,但主要区别在于

speed_x = -speed_x

您在第二个版本中拥有的,仅更改局部变量(参数是局部变量!)speed_x,因此更改后的值不会持续存在。

在第一个版本中,

self.move = -self.move 

确实改变了 self(特别是它的一个属性)并且改变“持续”在未来对对象的方法调用中,该对象在这里作为 self 访问。

这只是裸名(如 speed_x)和限定名(self.move 行)之间的众多主要区别之一,而且我怀疑,这里有什么问题(如果不说 第二个版本如何不符合您的预期,您可能很难猜测)。

关于Python:为什么添加参数后方法的行为会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com