0

私は小さなスクリプトを機能させようとしていますが、問題が何であるかはわかりません。メソッドの1つが、テスト変数を返さなくても変更します。つまり、それをローカルで操作したいのですが、値を返します。これは私の実際のコードではありませんが、それを表していると確信できます。

更新:私は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}
4

3 に答える 3

3

関数ローカル名を使用しています。selfメソッド間で情報を共有するために、( 経由で) インスタンスに属性を設定します。

class check:
     def pathgen(self):
         self.test = 0
         print self.test
     def assign(self):
         self.test = 1
         self.pathgen()
         print self.test
于 2013-03-13T18:10:18.807 に答える
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
于 2013-03-13T19:04:28.347 に答える
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]2 回印刷されます。

testこれは、 inのコピーを作成することで対処できます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()
于 2013-03-13T18:10:08.213 に答える