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:
CEVAP
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
Exception
s 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
Python deneyin-baÅŸka...
Python deneyin...virgül vs' dışın...
İyi bir uygulama-dışında-başka deneyin...
Python: eğer bir dize bir tamsayı Dışı...
Yakalama deneyin-dışında Python keyboa...