访问方法返回值是否重新运行该方法?

2024-09-30 20:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在学习Python和编程的过程中,我遇到了一个不太确定的概念。我正在编写一个脚本,我很好奇我是否已经创建了一个对象,如果我想从该对象的一个方法中访问返回的值,它会重新运行该方法,还是仅仅用这些值来回复。例如:

class ClassOne():
    def oneMethod(self):
        x = 2
        y = 10
        return x, y

class ClassTwo():
    def twoMethod(self, x, y):
        ...

newObject = ClassOne()
newObject.oneMethod()

secondObject = ClassTwo()

# My question is, will the lines below re-execute newObject.oneMethod()
# or will it simply pull the already returned value

secondObject.twoMethod(newObject.oneMethod()[0],
                       newObject.oneMethod()[1])

虽然我的脚本不一定大到足以超级担心性能,但这只是我想知道的事情,在网上找不到太多关于它的信息


Tags: the对象方法self脚本def编程will
2条回答

答案是肯定的,方法每次被调用时都会重新执行

您可以通过在oneMethod()中添加对print()的调用来验证这一点,以查看是否每次调用它时都执行它的代码。你会发现是的

通过将返回值绑定到某些变量,可以避免重新执行,例如

a, b = newObject.oneMethod()    # will call and execute the code in oneMethod()
secondObject = ClassTwo()
secondObject.twoMethod(a, b)

这里元组(2, 10)将从oneMethod()返回,并将其解压到变量ab中,这样a = 2b = 10。也可以使用单个元组变量,然后通过索引访问各个元素:

t = newObject.oneMethod()
secondObject.twoMethod(t[0], t[1])
# secondObject.twoMethod(*t)    # also works, see below...

另一种不必先保存返回值的方法是使用*运算符的元组解包将oneMethod()的返回值直接传递到twoMethod()

secondObject = ClassTwo()
secondObject.twoMethod(*newObject.oneMethod())

你的题目和正文问了一个不同的问题

不,访问方法的结果不会重新运行该方法。但那不是你在这里要做的;您显式地调用该方法两次,因此它当然会运行两次

通常的做法是将返回值赋给一个变量,并根据需要多次使用它

相关问题 更多 >