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

时间:2017-12-17 08:58:08

标签: python python-3.x class methods

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

虽然我的剧本不一定足以让人过分担心表演,但这只是我想知道并且无法找到很多关于网络的信息。

2 个答案:

答案 0 :(得分:2)

你的标题从文本正文中提出了另一个问题。

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

正常的做法是将返回的值分配给变量,并根据需要多次使用。

答案 1 :(得分: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 = 2和{{1} }}。您还可以使用单个元组变量,然后通过索引访问单个元素:

b = 10

另一种方法是,无需先保存返回值,就是使用t = newObject.oneMethod() secondObject.twoMethod(t[0], t[1]) # secondObject.twoMethod(*t) # also works, see below... 运算符使用元组解包将oneMethod()的返回值直接传递给twoMethod()

*