class Test:
TheFlag = True
StartNodeQuery = {1, 2, 3, 4, 5}
def parsa(self):
while self.TheFlag:
SNQ = self.StartNodeQuery
self.iterator(SNQ)
def iterator(self, CurrentNodeQuery):
#it prints {1, 2, 3, 4, 5}
print(CurrentNodeQuery)
if len(CurrentNodeQuery) < 100:
b = len(CurrentNodeQuery) * 2
c = len(CurrentNodeQuery) * 3
self.StartNodeQuery.update({b, c})
# it prints {1, 2, 3, 4, 5, 10, 15}
print(CurrentNodeQuery)
else:
self.TheFlag = False
assert 0
obj = Test()
obj.parsa()
如您所见,我故意用assert 0结束程序。 主要问题是: 在函数完成之前,传递给它的参数会被更改
如你所见 StartNodeQuery={1,2,3,4,5}和 SNQ=self.StartNodeQuery
那么,为什么在函数完成之前更改self.StartNodeQuery内部的大小时,CurrentNodeQuery(与self.StartNodeQuery(或SNQ)具有相同值的另一个变量)也会更改,即使我们还没有将新的self.StartNodeQuery传递给CurrentNodeQuery
我希望你能理解我的问题,如果你有解决办法,请帮助一个人
代码中的一些问题和建议
不要混合使用类和实例变量。您正在使用类变量
TheFlag
和StartNodeQuery
作为实例变量,因此将它们设置为一个使用构造函数实例化实例变量
也许可以使用
exit()
来中断函数您需要显式地复制集合,以便通过copy.copy创建一个新实例。赋值
SNQ = self.StartNodeQuery
只是对变量进行新的引用所以固定的代码可能看起来像
输出将是
相关问题 更多 >
编程相关推荐