我正在尝试让我的小脚本工作,但我不知道问题是什么,其中一种方法会修改我的测试var,即使我不返回它,我的意思是,我想用它来工作本地而不是返回值。这不是我的实际代码,但你可以肯定代表它。
更新:我正在使用词典
>>> class check:
... def pathgen(self,test):
... test['a']=0
... print test
... def assign(self):
... test={'a':1}
... self.pathgen(test)
... print test #WILL PRINT 0
...
>>> a=check()
>>> a.assign()
{'a': 0}
{'a': 0}
答案 0 :(得分:3)
您正在使用函数本地名称。在实例上设置属性(通过self
)以在方法之间共享信息:
class check:
def pathgen(self):
self.test = 0
print self.test
def assign(self):
self.test = 1
self.pathgen()
print self.test
答案 1 :(得分:1)
在您的代码中,'pathgen'将修改其第一个参数所指向的内容。 为避免这种情况,您可以在对其进行任何更改之前复制“test”
有关复制的更多信息:http://docs.python.org/2/library/copy.html
class check:
def pathgen(self,test):
local_copy = test.copy()
local_copy['a'] = 0
print local_copy
答案 2 :(得分:0)
你的假设是错误的。事实上,WILL PRINT 0
行会打印1
。
请注意,如果test
是列表,情况会有所不同,pathgen
要修改它(例如,通过附加元素):
class check:
def pathgen(self,test):
test.append(1)
print test
def assign(self):
test=[]
self.pathgen(test)
print test
check().assign()
事实上,这会打印[1]
两次。
可以通过在test
中复制pathgen
来解决此问题:
class check:
def pathgen(self,test):
test=test[:] # make a shallow copy of `test'
test.append(1)
print test
def assign(self):
test=[]
self.pathgen(test)
print test
check().assign()