SORU
25 Ocak 2009, Pazar


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
25 Ocak 2009, Pazar


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • njhaley

    njhaley

    24 NİSAN 2006
  • superemposed

    superemposed

    25 Aralık 2007