2012-01-25 2 views
2

가져온 다음 호출 할 때 하나의 튜플을 검사하고 수정하는 함수를 만들려고합니다. 나는 이것을 여러 번 부를 수 있기를 바란다. 그러나 변수를 변경하는 방법을 찾을 수 없기 때문에 새 변수를 반환하는 기능 만 있습니다. 그러나 지금 나는이 작업을 수행해야가져온 함수를 통한 파이썬 변경 수정

**modifier.py** 
import variable 

def function(new_string): 
    if new_string not in variable.tuple: 
     variable.tuple = new_string, + variable.tuple 

**variable.py** 
import modifier 

tuple = ('one','two',) 

modifier.function('add this') 

modifier.function('now this') 

#--> tuple should now equal ('now this', 'add this', 'one', 'two',) 

:

**modifier.py**  
def function(tuple_old, new_string): 
    if new_string not in tuple_old: 
     return new_string, + tuple_old 

**variable.py** 
import modifier 

tuple = ('one','two',) 

tuple = modifier.function(tuple, 'add this') 

tuple = modifier.function(tuple, 'now this') 

#--> tuple now equals ('now this', 'add this', 'one', 'two',) 

이 많이 지저분하다

는 여기에 내가 그것을 어떻게 처리할지 두 개의 파일, 내 예입니다. 먼저, 튜플을 직접 바꾸는 대신 오래된 튜플 값을 전달하고 반환 된 값을 얻어야합니다. 작동하지만 DRY가 아니며이 클리너를 만드는 방법이 있어야합니다.


사실 이것은 장고 설정 파일에서 내 미들웨어를 업데이트하는 기능이기 때문에 목록을 사용할 수 없습니다. 또한 나는 이 다른 파일에 대한 기능을 가지고을 가지고 있지 않지만 또한 그것이 가능해야한다고 생각합니다.

def function(new_string): 
if new_string not in variable.tuple: 
    variable.tuple = (new_string,) + variable.tuple 
+0

첫 번째 블록에서 코드를 시도해 보셨습니까? –

+0

튜플을 수정할 수 없습니다. – wim

+0

주기적 임포트가 있습니다 – wim

답변

2

난 당신이 지금 (마지막 코드 블록) 무슨 일을하는지에 대해 잘못 아무것도 표시되지 않습니다, 그것은 분명하다 :

+0

마지막 코드 블록은 내가 원했던 것이지만 터플과 함수 호출과는 별도의 파일에있는 함수를 원합니다. 내가 가지고있는 일을 할 때 함수에서 파일의 튜플을 변경하지만 튜플 파일에서 호출 할 때 튜플이있는 파일에서 함수를 호출 한 후에 편집 된 버전을 유지하지 않습니다. –

+0

사실 저는 당신이 옳다고 생각합니다. 더 분명한. 나는 다른 방법이 가능하더라도 여전히 궁금하다. –

+1

@ saul.shanabrook : 그렇습니다. 매개 변수로 매개 변수를 전달해야한다는 사실을 정말로 강요하지 않는 한, 더 명확합니다. :) 호기심에서 나는 두 파일을 사용하여 무엇을하려고했는지 주기적인 수입으로 끝났기 때문에 오류가 발생했습니다. –

1

이것은 작동하는 것 같다. 내가 같은 표시되는 경우

tuple = # something ... 

을 그 튜플이 변경 알고있다 (아마 당신은 예를 들어, 사용 단지 이름,하지만 당신의 변수 "튜플"를 호출하지 마십시오).

그러나 나는 (당신이하고 싶은 것)이 표시되는 경우 : 나는 functiontuple의 그쪽으로 값을 변경 상상 없었어요

tuple = 'one', two' 
function('add this') 

. 어쨌든, 그것은 함께 할 수있다 :

tuple = 'one', 'two' 

def function(string): 
    global tuple 
    if new_string not in tuple: 
     tuple = (new_string,) + tuple 

function('add this') 

또한이 같은 뭔가를 할 수있다 :

tuple = 'one', two' 
function(tuple, 'add this') 

나는 그것이 조금 더 말하고 싶지만 난 당신의 코드를 가진 probelms를 사용한다면 나는 수 있기 때문에 function이 튜플을 수행한다고 추측하십시오.

그리고 코드가 될 것이다 : 나는 당신이 지금하고있는 일 것이 분명하고 더 간단라고 말하고 싶지만 끝에

tuple = 'one', 'two' 

def function(old_tuple, string): 
    global tuple 
    if new_string not in old_tuple: 
     tuple = (new_string,) + old_tuple 

function(tuple, 'add this') 

, 나는 그것을 변경하지 않을 것입니다.

+0

동일한 파일에있는 경우 작동합니다. 그렇지 않은 경우 그렇지 않습니다. [기타 답변] (http://stackoverflow.com/a/9000442/907060) 잘 설명합니다. –