在我学习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])
虽然我的剧本不一定足够大,不能过分担心性能,但这只是我想知道的,并且找不到很多关于在线的信息。
您的标题会从文本正文中提出另一个问题。
不,访问方法的结果不会重新运行该方法。但那不是你在这里所做的;你明确地调用了两次方法,所以它当然会运行两次。
通常要做的是将返回的值赋给变量并根据需要多次使用。
答案是肯定的,该方法将在每次调用时重新执行。
您可以通过在print()
中添加对oneMethod()
的调用来验证它是否在每次调用时执行它的代码。你会发现它是。
您可以通过将返回值绑定到某些变量来避免重新执行,例如:
a, b = newObject.oneMethod() # will call and execute the code in oneMethod()
secondObject = ClassTwo()
secondObject.twoMethod(a, b)
这里元组(2, 10)
将从oneMethod()
返回,它将被解压缩到变量a
和b
,使a = 2
和b = 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())