2011-01-21 5 views
9

다음 코드를 고려하여 가져온 모듈의 변수 수정 : 보인다으로은에서 ... 수입 *

#main.py 
From toolsmodule import * 
database = "foo" 

#toolsmodule 
database = "mydatabase" 

을, 이것은 다른 콘텐츠와 각 모듈에서 하나 개의 변수를 생성합니다. main에서 toolsmodule 내부의 변수를 어떻게 수정할 수 있습니까? 다음은 작동하지 않습니다

toolsmodule.database = "foo" 

답변

13

from toolsmodule import *를 사용하지 않는 이유의 무리의 또 다른 것 같네요.

import toolsmodule을 수행하는 경우 toolsmodule.database = 'foo'을 수행하면 모든 것이 훌륭합니다.

+2

이 사실을 알고 있지만 이러한 변수를 많이 사용합니다. 모듈 이름이 길고 추가 입력을 피하고 싶습니다. – David

+12

그래서 모듈 이름을 짧게 만드십시오 :'import longmodulename as sname'. 이제'sname'은'longmodulename'을 참조 할 것입니다. – user225312

+4

매번'toolsmodule '을 입력하지 않으려면 다음을 할 수 있습니다 :'import toolsmodule as tm'. 이렇게하면 네임 스페이스를 정상적으로 유지하고 타이핑을 줄일 수 있습니다. – miku

1

왜 그런 식으로하지 않습니다

import toolsmodule 
toolsmodule.database = "foo" 
from toolsmodule import * #bad idea, but let's say you have to.. 
print database #outputs foo 
+0

이것을 시도한 결과, toolsmodule 내부에서 변수를 수정할 수 없게되었다고 생각합니다. 이를 검증해야합니다. – David

7

파이썬 변수 이름은 변수 레이블입니다. import * 레이블이 모두 로컬 일 때 데이터베이스를 설정할 때 toolsmodule의 변수가 아닌 로컬 변수 만 바꿉니다.

toolsmodule.py :

database = "original" 

def printdatabase(): 
    print "Database is", database 

을 다음 실행 : 따라서, 이렇게 출력이

Database is newdatabase 

참고가 만약 당신이 다음 다른 모듈에서도

import toolsmodule 
toolsmodule.database = "newdatabase" 
toolsmodule.printdatabase() 

입니다

않았다 import * 변경 내용이 반영되지 않습니다.

짧은 의미로 : from x import *을 사용하지 마십시오. 나는 왜 모든 초보자가 내가 알고있는 모든 문서가 이것이 나쁜 생각이라고 말하고 있지만 이것을 계속하는 이유를 모르겠다.