Python局部变量作为参考?

2024-09-30 18:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让我的小脚本工作,但我不知道问题是什么,其中一个方法会修改我的测试变量,即使我不返回它,我的意思是,我想在本地工作,而不是返回值。这不是我的实际代码,但你可以确定它代表。你知道吗

更新:我正在使用dict

    >>> 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}

Tags: 方法代码testself脚本defcheck代表
3条回答

在您的代码中,“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

你的假设是错误的。实际上,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]两次。你知道吗

这可以通过在pathgen中复制test来解决:

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()

您正在使用函数本地名称。在实例上设置属性(通过self)以在方法之间共享信息:

class check:
     def pathgen(self):
         self.test = 0
         print self.test
     def assign(self):
         self.test = 1
         self.pathgen()
         print self.test

相关问题 更多 >