2014-10-05 4 views
1

그래서 두 개의 파이썬 파일이 있습니다. module.py와 main.py라고 부르 자. module.py은 다음과 같습니다Python : 모든 변수 가져 오기

name = "bob" 
age = 20 

def changename(): 
    name = "tim" 

및 main.py는 다음과 같습니다 : 내가 main.py를 실행하면

import module 
print(module.name) 
module.changename() 
print(module.name) 

, 내가 도착 예상대로이 출력 :

>"bob" 
>"tim" 

그러나 항상 module.name을 작성해야하는 것은 시간이 많이 걸리므로 모든 변수와 함수를 main.py에 가져 오는 import * 모듈에서 할 수 있습니다. 그러나,이에 main.py의 코드를 변경 한 후 :

from module import * 
print(name) 
changename() 
print(name) 

내가이 출력 얻을 :이 것을 나는 가정

>"bob" 
>"bob" 

을하기 때문에 파이썬 수입 시작 부분에서 변수의 값 및 그런 다음 module.py 내의 함수에 의해 변경 될 때 업데이트되지 않습니다.

제 질문은 모듈의 모든 함수와 변수를 멋지게 가져올 수있는 방법이 있지만 모듈이 변수를 업데이트하도록 허용하고 있습니까? 사전에

감사합니다!

+3

첫 번째 코드가 출력을 리턴하는 방법은 없습니다. –

+5

'from module import *'는 일반적으로 나쁜 습관입니다; 더 짧은 이름이 필요하다면,'import module as m'. – jonrsharpe

답변

1

가장 좋은 방법은 공유하려는 각 전역 변수에 대해 getter 및 setter 함수를 module.py에 작성하는 것입니다. 이처럼 : 다음

name = "bob" 
age = 20 

def changename(): 
    global name # This tells that name is not local variable. 
    name = "tim" 

def getname(): 
    return name 

,이 같은 main.py에서 이러한 게터를 사용할 수 있습니다

import module 

print(module.getname()) 
module.changename() 
print(module.getname()) 

그러나 나는 긴 이름을 방지하는 기능을 하나씩 가져 좋습니다. 이와 같이 :

from module import changename 
from module import getname 

print(getname()) 
changename() 
print(getname()) 

이 코드를 Python2.7에서 테스트했습니다. 값을 설정하기 전에 변수를 전역 변수로 정의하십시오. 함수에서 변수에 값을 설정하면 로컬 변수가됩니다 (파이썬이 이런 방식으로 작동합니다!).

0

몇 가지 테스트를 마친 후 가장 좋은 방법은 @jonrsharpe가 제안한 것처럼 'variables.py'라는 짧은 파일을 가져온 세 번째 파일을 가져 오는 것입니다. 두 파일 모두 variables.name을 변경하거나 볼 수 있습니다.