Kullanıyorsanız python vs deneyin | Netgez.com
SORU
2 Aralık 2009, ÇARŞAMBA


Kullanıyorsanız python vs deneyin

Bir gerekçesi try if bir değişken değeri için test ederken kullanmak için inşa eden bir karar var mı?

Örneğin, ya da bir listesini verir ya da bir değer döndürmez bir işlevi yoktur. Bu işleme başlamadan önce sonucu kontrol etmek istiyorum. Aşağıdakilerden hangisi ve neden daha fazla tercih edilir?

result = function();
if (result):
    for r in result:
        #process items

ya

result = function();
try:
    for r in result:
        #process items
except TypeError:
    pass;

İlgili tartışma:

Checking for member existence in Python

CEVAP
2 Aralık 2009, ÇARŞAMBA


Sık sık bu Python EAFP tarzı teşvik duymak ("izin daha AF dilemek daha kolay oluyor") LBYL tarzı ("önce leap bak"). Bana, verimlilik ve okunabilirlik meselesi.

Senin örnek (söylemek yerine dönen bir liste veya boÅŸ bir dize iÅŸlevi vardı dönmek bir liste veya None), EÄŸer beklediÄŸiniz ™ kez result aslında içeren bir iterable kullanabilirsiniz, try/except yaklaşım. EÄŸer özel durumlar gerçekten olaÄŸanüstü eÄŸer daha hızlı olacaktır. EÄŸer result zaman P daha None daha sonra if kullanarak muhtemelen daha iyi.

Birkaç ölçüm ile bu destek için:

>>> import timeit
>>> timeit.timeit(setup="a=1;b=1", stmt="a/b") # no error checking
0.06379691968322732
>>> timeit.timeit(setup="a=1;b=1", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.0829463709378615
>>> timeit.timeit(setup="a=1;b=0", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.5070195056614466
>>> timeit.timeit(setup="a=1;b=1", stmt="if b!=0:\n a/b")
0.11940114974277094
>>> timeit.timeit(setup="a=1;b=0", stmt="if b!=0:\n a/b")
0.051202772912802175

Yani, if deyimi iseher zamanmaliyeti neredeyse ücretsiz try/except bir blok kurmak. Ama Exception aslında oluştuğunda, maliyeti çok yüksektir.

Ahlaki:

  • HerÅŸey yolunda (ve akış kontrolü için try/except kullanmak için."") pythonic
  • ama Exceptions gerçekten olaÄŸanüstü anlamda ne zaman ortaya çıkar.

Dokümanlar: Python

EAFP

AF dilemek daha kolay izni. Bu ortak Python kodlama stili geçerli varlığını varsayar anahtarları veya öznitelikleri ve yakalar varsayım ise istisnalar kanıtlıyor yanlış. Temiz ve hızlı tarzı bu. birçok varlığı ile karakterize try except tablolar. Bu tekniği LBYLile tezat stil birçok diğer diller için ortak C. gibi

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • MofoHifi Records

    MofoHifi Rec

    15 HAZÄ°RAN 2006
  • TheOtherMau5

    TheOtherMau5

    6 Mart 2012