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

=============Pourquoi il y a une différence entre "importation" et "importation *"?

~ $ 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' 
>>> 

Répondre

21

variables avec un chef de file "_" (soulignement) ne sont pas noms publics et ne sera pas importée lorsque from x import * est utilisé .

Ici, _test et __test ne sont pas publics noms.

De la description de l'instruction import:

Si la liste des identifiants est remplacé par une étoile (« * »), tous les noms publics définis dans le module sont liés dans l'espace de noms local du importation déclaration ..

les noms publics définis par un module sont déterminées en vérifiant l'espace de noms du module pour une variable nommée __all__; si elle est définie, elle doit être une séquence de chaînes dont les noms sont définis ou importés par ce module. Les noms donnés dans __all__ sont tous considérés comme publics et sont requis pour . Si __all__ n'est pas défini, l'ensemble de noms publics inclut tous les noms trouvés dans l'espace de noms du module, lesquels ne commencent pas par un caractère de soulignement ('_'). __all__ devrait contenir l'API publique entière. Il est destiné à éviter accidentellement exporter des éléments qui ne font pas partie de l'API (tels que les modules de bibliothèque qui ont été importés et utilisés dans le module ).

Questions connexes