SORU
14 Aralık 2009, PAZARTESİ


Ve halk Django şablon numara

Django kitapları bağlam sözlük http://www.djangobook.com/en/2.0/chapter04/ türü parametrelerin uzun bir liste önlemek için yerel bir numara verir

Tembel programcılar için bu önerir ama performansı üzerinde bir etkisi olabilecek bazı havai işaret eder.

Eğer bazı gerçek uygulamalar üzerinde Yerli hile kullanarak olup olmadığını bilmek istiyorum. Tavsiye ederim, yoksa kötü bir uygulama mı?

CEVAP
14 Aralık 2009, PAZARTESİ


Tekrarı -- sevmiyorum sanırım "", "Kendinizi Tekrar etmeyin", anahtar bir programlama prensibidir. KURU Sonuç olarak, gerçekten benzer durumlarda locals() kullandım. Django şablon oluşturma bu tür bir durumdan uzaktır: genel durum bir dict kabul eder, ama eğer dict varsa aldırmaz "bir fonksiyon veya operatör ekstra girişler". (Örneğin, sıradan bir dize python'daki biçimlendirme bir durumdur).

Ancak, bir telafi edici ilkesi: program olması anlaşılır gibi yerelleştirilmiş bir yol olarak uygulanabilir çok yardımcı bakım ve yeniden düzenleme (olarak değerlerine karşılık gerek çalışma, diğer dosyalar için onay ne refactorings kabul edilmektedir). Bu işaret, için locals() dava, TAMAM eğer şablonu (veya dize biçimi, vb.) bir yerel literal (nadir bir olgu sadece birkaç değişken vardır muhtemelen kullanılan ve böylece locals() bir büyük kazanın!-), ama şablonu farklı bir dosya içinde yaşadığı normal durumda sorunlu.

Yani, çoğu durumda locals() kullanarak ciddi çabasını engellemektedir. Hemen hemen her durumda Python, yerel değişkenler ve isimlerini özgürce değişmez bir parçası olarak yerel bir yeniden düzenleme, ondan beri var hayır "dışarıdan görünen" etkisi... ama kullanma locals() keser -- birden yapamazsın güvenli bir şekilde yeniden bir değişken için farklı bir ad sunan daha iyi netlik, yeniden kod akışı bir şekilde kaldırır ihtiyacı için bir değişken, vs, vs, olmaksızın, her zaman okuyan ayrı bir şablon dosyası için, eski adı olmayabilir gerekli (ve muhtemelen düzenleme şablon dosyası, önemsiz olmayan, örneğin muhafaza içinde birkaç farklı doğal diller için i18n/L10n amaçlar).

Performans ikincil sorununa ek olarak bir sonucu olarak, güçlü bir baskı varkarşılocals()"", "üretim" yapıyor -- kod uzun vadeli bakım ve bu nedenle kolay yeniden düzenleme ve yerellik. kod lazım ciddi kullanarak Ben ne zaman bu kadar, programlama gibi iyi biliyorum "nasıl" yerine, "işin kolayına kaçıp," daha iyi locals() önlemek kaldım farkındayım.

Değerler istiyorsunuz, bu bağlamda hangi şablonu işlenmez mutlaka "doğal olarak" mevcut yerel çıplak adları, tüm sonra, belki bir veya birçok bunların sonuçlarının hesaplamaları, öğeleri liste veya sözlük gibi. Bu durumda, "köşeler locals() Eğer sadece birikir eğer önlemek daha kolaydır" onları atamak yerine uygun bir sözlük içine değerleri yerel çıplak isimler. kesmek için günaha

İki iyi ilkeleri (tekrar kaçınarak ve iyi bir konum olması) kaçınılmaz olarak -- bu nedenle, iyi bir soru çatışan çünkü en kolay değiş tokuş değil! Ve her iki tarafta da genişletmek için çalıştım o yüzden siyah ya da beyaz, keskin cevaplar için tamamen duyarlı değil. Sonunda, bence ikisinden biri işte "tarz" yönlerini bir programlama ekibi olabilir iyi tavsiye benimsemek ekip-üniforma tarzı Klavuzu ve sopa -- en az kaldırır bir karar ve üzerinde her zaman sorun ortaya çıkıyor ve üreten bir daha homojen (ve böylece sürdürülebilir) kod tabanı. [[Bu noktada asla Diğerleri olmasına rağmen açıkça tarzında binmedim takım kurallar olsa da ele alınmış itiraf etmeliyim ki!-)]]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jose LviS el Bambino ( JLB )   LviSito

    Jose LviS el

    3 ŞUBAT 2008
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005