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

=========Neden "içe aktarma" ile "içe aktarma *" arasında bir fark var?

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

cevap

21

Değişkenler .

Burada, _test ve __test, public adlarıdır. import açıklamada açıklamasından

:

kimlik listesindeki bir yıldız ('*'), modül içindeki bütün kamu isimleri ait yerel ad alanında bağlıdırlar tarafından değiştirilirse deyimi .. bir modül tarafından tanımlanan

kamu isimleri değişken adlı __all__ için modülün ad kontrol ederek belirlenir içe; tanımlıysa, bu modül tarafından tanımlanan veya içe aktarılan adları olan dizilerin dizisi olmalıdır. __all__ içinde verilen isimlerin tümü, genel olarak kabul edilir ve için gereklidir. __all__ tanımlanmamışsa, genel adlar kümesi, altyazısı karakteriyle ('_') başlamıyor modülün ad alanında bulunan tüm adları içerir. __all__, numaralı tüm API'yı içermelidir. , API'sinin ( modülünün modülünde içe aktarıldığı ve kullanıldığı kütüphane modülleri gibi) dışa aktarılan öğeleri istemeden olması amaçlanmıştır.

İlgili konular