Python kodlama stilini alma
Yeni bir model buldum. Bu desen iyi bilinen veya bu konuda görüşü nedir?
Temel olarak, sabit bir zaman ve bir temizlik var kaynak ithalat modülü mevcuttur anlamaya ve benzeri, şimdi, yerine dosyaları
import foo
from bar.baz import quux
def myFunction():
foo.this.that(quux)
Aslında kullanılacak işlevi, tüm ithalat öneriyorum bu gibi:
def myFunction():
import foo
from bar.baz import quux
foo.this.that(quux)
Bu birkaç şeyi yapar. İlk olarak, ben nadiren yanlışlıkla diğer modüllerin içeriği ile benim modülleri kirletiyor. Elimden set __all__ değişken modül, ama o zaman da benim elime güncelleme olarak modül geliştirilmesi ve bunun bir yararı yok ad kirliliği için kod aslında hayatımızda modülü.
İkincisi, ben nadiren olan Ben refactored ettim çünkü artık gerek benim modülleri üst yarısı ya da daha fazla ithalat bir ayin sonunda. Son olarak, her başvurulan adı orada işlev gövdesi olduğundan bu modeli anlamak DAHA kolay buluyorum.
CEVAP
Bu birkaç dezavantajları var.
Test
Çalışma zamanı değişikliği ile modülü test etmek istediğiniz bir ihtimal daha zor olabilir. Yapmak yerine
import mymodule
mymodule.othermodule = module_stub
Yapmak zorunda kalacaksın
import othermodule
othermodule.foo = foo_stub
Bu mymodule içinde referans noktaları şeyi değiştirmek için karşı othermodule küresel yama gerekecek demektir.
Bağımlılık İzleme
Bu module bağlıdır şeyi olmayan açık hale getirir. Özellikle bir çok üçüncü parti kütüphaneleri kullanın veya yeniden düzenleme kodu ise sinir bozucu.
Her yerde, kodu son derece zor yapılmış içi ithalat kullanılan bazı eski kod korumak için yeniden oluşturulması veya yeniden paketlemek zorunda kaldım.
Performans İle İlgili Notlar
Çünkü python modülleri önbelleğe alır, bir performans isabet yok. Modül yerel ad olduğu için aslında, bir işlevi alma modülleri için küçük bir performans yararı yoktur.
Üst Alma
import random
def f():
L = []
for i in xrange(1000):
L.append(random.random())
for i in xrange(10000):
f()
$ time python test.py
real 0m1.569s
user 0m1.560s
sys 0m0.010s
Fonksiyon gövdesinde alma
def f():
import random
L = []
for i in xrange(1000):
L.append(random.random())
for i in xrange(10000):
f()
$ time python test2.py
real 0m1.385s
user 0m1.380s
sys 0m0.000s

Alma python modül yolu...
Nasıl yeniden alma Python Yorumlayıcıs...
Ayarı boru Python stdout zaman doğru k...
Python: ana klasöründen Alma modülleri...
Python: alt dizininden bir dosya alma...