当我正在学习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])
虽然我的剧本不一定足以让人过分担心表演,但这只是我想知道并且无法找到很多关于网络的信息。
答案 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()
返回,它将被解压缩到变量a
和b
中,以便a = 2
和{{1} }}。您还可以使用单个元组变量,然后通过索引访问单个元素:
b = 10
另一种方法是,无需先保存返回值,就是使用t = newObject.oneMethod()
secondObject.twoMethod(t[0], t[1])
# secondObject.twoMethod(*t) # also works, see below...
运算符使用元组解包将oneMethod()
的返回值直接传递给twoMethod()
:
*