2016-09-06 8 views
0

나는 다음과 같은 모듈이 있습니다다른 모듈에서 변수 값을 변경하는 방법은 무엇입니까?

test.py

import test1 


var1 = 'Test1' 
var2 = 'Test2' 

print var1 
print var2 

test1.modify_vars(var1, var2) 

print var1 
print var2 

및 모듈을

나는 다음을 얻을 것으로 기대하고있다

def modify_vars(var1, var2): 
    var1 += '_changed' 
    var2 += '_changed' 

test1.py 출력 :

,451,515,
Test1 
Test2 
Test1_changed 
Test2_changed 

나는 얻을 것이다 :

Test1 
Test2 
Test1 
Test2 

은 TEST1 모듈 테스트 모듈을 가져 피하기 위해 필수입니다.

메서드에서 값을 반환하지 않고이 작업을 수행하는 방법은 무엇입니까? (일종의 참조 전달)

+1

* "왜 다음 출력을 얻을 수 있습니까?"- 왜? 당신은 불변의 객체를 전달하고 있습니다. 해결하려고하는 실제 문제는 무엇입니까? – jonrsharpe

+0

나는 이것이 변하지 않다는 것을 안다, 나는 단지 이것을 어떤 식 으로든 이루고 싶다. 그리고 나는 달성해야하는 것을 게시했다. –

답변

3

문자열을 변경할 수 없습니다. 당신이 원하는 것을 할 수는 없습니다. +=을 문자열과 함께 사용하면 항상 var1var2에 할당 된 문자열과 아무 관계가없는 새로운 문자열이 반환됩니다.

var = ['Test1', 'Test2'] 
... 

def modify_var(var): 
    var[0] += '_changed' 
    var[1] += '_changed' 
+0

좋은 해결책. 나는 그것이 효과가 있다는 것을보고 매우 놀랐다. 왜 돌아올 필요 없어? – Glostas

+0

@Glostas 이번에는 변경 가능한 객체 (목록)를 변경하려고하기 때문에 – jonrsharpe

+0

구체적으로 기존 목록의 * 내용 *을 수정하고 있습니다. 목록 자체에 대한 참조는 변경할 필요가 없습니다. 목록에있는 개별 요소를 가리키는 추가 변수가있는 경우 원래 변수 집합과 마찬가지로 작동하여 업데이트가 표시되지 않습니다. –

-1
:

당신은 (그리고, 솔직히 말해서, 당신은 아마 당신의 요구 사항을 변경해야합니다) 원하는에 가까운 무언가를 달성하는 유일한 방법은 별도의 변수보다는 목록을 사용하고, 그 내용을 수정하는 것입니다

함수가 반환 값을 누락합니다.

var1 = 'Test1' 
var2 = 'Test2' 

def modify_var(var1, var2): 
    var1 += '_changed' 
    var2 += '_changed' 
    return (var1,var2) 


(var1,var2) = modify_var(var1,var2) 
print var1,var2 

작동합니까.

저는 코드에 최소한의 변경 만 필요하다고 생각합니다.

파이썬으로 테스트 2.7

관련 문제