2009-08-19 6 views
6
"""module a.py""" 
test = "I am test" 
_test = "I am _test" 
__test = "I am __test" 

============='가져 오기'와 '가져 오기 *'의 차이점은 무엇입니까?

~ $ python 
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from a import * 
>>> test 
'I am test' 
>>> _test 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '_test' is not defined 
>>> __test 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '__test' is not defined 
>>> import a 
>>> a.test 
'I am test' 
>>> a._test 
'I am _test' 
>>> a.__test 
'I am __test' 
>>> 

답변

21

변수 .

여기에서 _test__testpublic이 아닙니다. import 문 설명에서

:

식별자의 목록은 별표 ('*'), 모듈에 정의 된 모든 공용 이름 가의 지역 네임 스페이스에 바인딩에 의해 을 교체하면 문 .. 모듈 에 의해 정의

공공 변수의 이름을 이름 __all__의 모듈의 네임 스페이스를 확인하여 결정을 가져; 정의 된 경우 이어야하며 그 모듈에 의해 정의되거나 가져 오는 이름은 인 문자열 시퀀스 여야합니다. __all__에 제공된 이름은 모두 으로 공개되어 있으며, 이 필요합니다. __all__이 정의되지 않은 경우 공용 이름 집합에는 모듈의 네임 스페이스에있는 이라는 모든 이름이 포함되어 있습니다. 은 밑줄로 시작하지 않고 ('_') 문자로 시작합니다. __all__의 경우 전체 공개 API가 포함 된 이어야합니다. 실수로 API의 일부가 아닌 항목 (예 : 모듈을 가져 와서 모듈 내에서 사용하는 라이브러리 모듈)을 내보내는 것을 방지하기위한 것입니다 ( ).

관련 문제