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

问题描述 投票:0回答:2

在我学习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])

虽然我的剧本不一定足够大,不能过分担心性能,但这只是我想知道的,并且找不到很多关于在线的信息。

python python-3.x class methods
2个回答
2
投票

您的标题会从文本正文中提出另一个问题。

不,访问方法的结果不会重新运行该方法。但那不是你在这里所做的;你明确地调用了两次方法,所以它当然会运行两次。

通常要做的是将返回的值赋给变量并根据需要多次使用。


0
投票

答案是肯定的,该方法将在每次调用时重新执行。

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

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

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())
© www.soinside.com 2019 - 2024. All rights reserved.