Neden Python's __al__ fromlist gerektiriyor mu?...
27 NİSAN 2010, Salı
Neden Python's __al__ fromlist gerektiriyor mu?
Eğer Program aracılığıyla almak için bir modül istiyorsanız, Python, yapabilirsiniz:
Eğer bir submodule almak istiyorsanız, basit bir mesele olacağını düşünürdüm:
Tabii ki, bu işe yaramaz; sadece module_name tekrar. Yapmanız gereken:
Neden?fromlist gerçek değeri olmayan boş olduğu sürece önemi yok. Bir bağımsız değişken gerektiren, kendi değerlerini yok sayarak ne anlamı var?
Python şeyler beni hayat için iyi bir nedeni ama bitmiş gibi görünüyor çoğu, var olmak için, bu davranış için herhangi bir mantıklı açıklama yapamıyorum.
Aslında __import__() davranışları tamamen __import__() aramalar import deyimi, uygulaması nedeniyle. Temelde __import__() import (iki ana kategorisi ile) çağrılabilir biraz farklı beş yolu vardır:
İlk olarakveikinci durumda, import deyimi "en soldaki" "en sol" adı: pkg. Bu modül nesne atamak gerekir import pkg.mod sonra import deyim yerel adı kullanılmaya başlandı çünkü pkg.mod.func() yapabilirsiniz mod bir özniteliği olan bir modül nesnesi olan pkg,. Yani, __import__() işlevi "sol-en pkg. atanabilir yani" modül nesne dönmeli Bu iki import deyimleri böylece tercüme:
Üçüncü, dördüncü ve beşinci durumda, import açıklama yapmak için daha fazla iş var atamak (potansiyel olarak) birden fazla isim var olsun modül nesne. __import__() fonksiyon tek dönüş bir nesne, ve orada gerçek bir sebep için yapmak almak her birinin isimleri modül nesne (ve bunu yapan bir uygulama çok daha karmaşık.) Basit yaklaşım (üçüncü durum) gibi bir şey olacaktır:
Ancak, eğer pkg bir paket ise işe yaramaz ve mod mod2 paketteki modüllero zaten alınmazüçüncü ve beşinci durumda olduğu gibi., __import__() fonksiyon bilmesine gerek mod mod2 adları import ifadesi olmasını erişilebilir, böylece o Eğer onlar modülleri ve denemek için al onları da. Böylece arama daha yakın
hangi nedenler __import__() deneyin ve yük pkg.mod pkg.mod2 pkg (ama mod mod2 Yok, Yok, Yok bir hata __import__() arama; üretim hatası sol import deyim.) Ama yine de bu, dördüncü ve beşinci örnek için doğru şey değil, eğer bir ara öyle olsaydı, çünkü:
sonra tmp başlamadan önce pkg ve submod öznitelik almak istiyorum pkg.mod modül yok olmuyor. Uygulama olabilirdi karar ver o zaman import açıklama yapar ek iş, bölme Paket ismi üzerinde . __import__() fonksiyonu zaten yok ve geçme isimleri, ama bu anlamına gelirdi çoğaltarak biraz çaba. Yani, bunun yerine, uygulama __import__() dönüş yaptı-en doğruyerine modülen soldakibirEğer ve sadece eğerfromlist geçti ve boş değil.
(import pkg as p 58* sözdizimi hiçbir şeyi değiştirmez bu hikaye dışında olan yerel isimlerini atanan -- __import__() işlevi görüyor hiçbir şey farklı as kullanılan tüm kalıntıları import bildirimi uygulaması.)
Bahar 3 RequestMappi...
Nasıl git benim repo...