2017-12-03 1 views
0

거대한 프로젝트가 3 개의 파일로 나뉘어져 있습니다. 나는 일반적으로 다른 파일의 한 파일에서 함수를 사용하는 데 아무런 문제가 없지만 이번에는이 작업을 수행 할 수 없습니다. 또한 필자가 파일간에 전달한 내 목록 중 하나가 기능에서 제외 된 후에 사라지는 이유를 이해하지 못합니다.파이썬에서 파일간에 함수를 사용할 수 없습니다.

파일 : settings.py

list1 = [] 

파일 : globals.py

from settings import * 
def foo(hey): 
    global list1 
    list1.append(hey) 

파일 : new_code.py

from settings import * 
from globals import * 
def cool_function(): 
    global list1 
    list1 = [] 
    hey = "you" 
    foo(hey) 
    print (list1) 


cool_function() 

목 문제는 내 코드가 globals.py에서 foo를 호출 할 수 없다는 것입니다. foo에서 들여 쓰기 오류가 발생합니다. 그 문제가 해결 되었더라도 list1에서 작업중인 실제 프로젝트에서 settings.py 파일에 추가되지만 cool_function으로 돌아간 후에는 빈 상태로 돌아갑니다.

#

업데이트 : 그래도 코드가 settings.py에서 함수 foo를 호출 할 수없는 경우에도 new_code.py 파일에 list1 = []을 제거하여. 당신이보고 싶을 경우 다음 파일은 다음과 같습니다 https://drive.google.com/file/d/1ZiTwl-DOPfZCrrrA1kBcBHh8c9AInFLI/view?usp=sharing> 파일

#은

업데이트 : 나는 변경 설정에서

-globals.py 파일 (헤이) * 데프 foo는 가져옵니다 list1.append (헤이)

그리고 new_code.py 파일

from settings import * 
from globals import * 
global list1 
def cool_function(): 

    list1 = [] 
    hey = "you" 
    foo(hey) 
    print (list1) 


cool_function() 
로를3210

그리고 그게 문제를 해결했지만 왜 이해가 안되요.

+0

cool_funtion에서 이동 globals list1 가져 오기를 사용 new_code.py에를 찾기 위해 텍스트 편집기의 "공백 렌더링"기능을 사용해야합니다 * 나쁜 연습으로 간주됩니다. import func1, func2, func3 –

답변

1

이 개 나쁜 아이디어 : 모듈 이름으로

  1. 사용 globals, globals이 내장 함수의 이름입니다.
  2. global 문을 사용하십시오.

전역 목록 개체를 유지하려면 개체를 개체로 묶는 것이 좋습니다. 그것을 ref-type 변수가되게하십시오.

더 나은 연습 : settings.py에서

: 당신의 new_code에

class Settings(object): 
    def __init__(self): 
     self.items = [] 

settings = Settings() 

.평 : 당신이 들여 쓰기 오류가 발생하는 경우

from settings import settings 

def cool_function(): 
    settings.items.append('something') 
    return settings.items 

print(cool_function()) 
+0

감사합니다.하지만 클래스를 사용하지 않고 해결책을 제공 할 수 있습니까? 나는 수업을 좋아하지 않고 수업을 사용하지 않는다. 내 마음에, 그들은 단지 일을 더 복잡하게 만듭니다. –

+0

@fredrussell은 이것을하기 위해 클래스를 사용할 필요가 없습니다. Actully는 new_code.py에서'list1 = []'줄을 지우면 코드가 정상적으로 작동합니다. –

0

당신이 들여 쓰기 문제

+0

들여 쓰기 오류가 아닙니다. 이 코드는 다른 파일에서 함수를 호출 할 수 없으며 그 이유 때문에 그것이 아닌 경우에도 들여 쓰기 오류라고 생각합니다. –

0

cool-function

관련 문제