2016-06-17 3 views
0

나는 몇 개의 파일로 내 파이썬 코드를 분할하기 위해 노력하고있어 :파이썬 여러 파일의 변수와 함수는

file1.py

from file2 import * 

var1 = 7 
func_file2() 

file2.py

def func_file2(): 
    var2 = var1 

그래서 말한다 :

NameError: global name 'var1' is not defined 

어떻게 해결할 수 있습니까?

file2에서 file1을 가져 오려고했습니다.

+0

가져 오기에는'*'를 사용하지 마십시오. 네임 스페이스가 혼란스럽고 같은 이름을 가진 두 개의 변수 또는 내장 함수와 이름이 같은 변수가있을 때 재미있는 문제를 일으킬 수 있습니다. 그냥 일반적인 팁. – Ian

+0

예, 미안 해요, 이해하기 쉽도록 변수 이름을 변경했습니다. –

+0

주기적으로 수입하지 마십시오! file1.py에서 먼저 fil2.py에서 모든 것을 가져 오기 때문에 http://stackoverflow.com/questions/37756028/import-module-defined-in-other-module/37756322#37756322 – Quirk

답변

0

func_file2는 var1이 정의되어있을 때 어떤 범위에도 존재하지 않으므로 closure가 작동하지 않으므로 변수 var1의 가시성을 갖지 않습니다.

모듈을 파이썬으로 작성할 때 응집성의 원칙을 따르십시오. 즉, 모듈의 함수가 다른 모듈의 변수를 사용하는 경우 잘못된 것일 수 있습니다.

1

var1file1에 정의되어 있지만 file2에서 참조하고 있습니다. 오류를 수정하려면 var1file2으로 옮길 수 있습니다.

file1.py

from file2 import *  
func_file2() 

file2.py

def func_file2(): 
    var1 = 7 
    var2 = var1 
당신은 var1를 정의하는 첫 번째 file2file1를 가져올 유혹 될 수 있지만,이 순환 가져 오기를 야기

(모두 file1 & file2은 서로를 참조합니다).

+0

Python에서 getters를 사용하는 것이 일반적입니까? 아니면이 코딩 방법을 사용해야합니까? –

+0

@SteevenBrunner http://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters – Ken

0

난 당신 같은 것을 할 수 있습니다, 당신은 그것이 지금 방식으로 작동하려는 경우 그러나 전역 변수를 사용하지 않는 것이 좋습니다 :

first file 
global var1 
var1 = 7 

second file 
from first_file_name import var1 #this will make your var1 accessible from the second file 

을 나는 그것이 도움이되기를 바랍니다.

관련 문제