SORU
2 NİSAN 2012, PAZARTESİ


Neden python 'başka' sonra ve döngüleri sırasında mı?

Bu yapıyı nasıl işlediğini anlıyorum:

for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break;
else:
    print("Completed successfully")

Ama anlamıyorum neden else olarak kullanılır burada anahtar kelime, bu yana öneriyor kodu soru sadece çalışan for engellemediği tam, tam tersi ne yapar! Düşünüyorum da nasıl olursa olsun, benim beyin else blok for deyimi sorunsuz bir şekilde devam edemez. Bana, continue continuewith daha mantıklı (ve benim gibi okumak için eğitmeye çalışıyorum) olur.

Python kodlama bu onların kafa (veya yüksek sesle, Eğer isterseniz) inşa okuyun nasıl merak ediyorum. Belki de böyle kod blokları daha kolay decipherable yapacak bir şey kaçırıyorum?

CEVAP
2 NİSAN 2012, PAZARTESİ


Bir ortak bir şey bulunana kadar çalışacak bir döngü için ve daha sonra döngü dışında kırmak için inşa. Sorun alakam sonu veya döngü sona erer neler olduğunu belirlemek gerekiyor. Bir yöntem, bana ikinci bir test döngüden çıkıldı nasıl olduğunu görmek için izin veren bayrak veya mağaza bir değişken oluşturmak için.

Bir liste arama ve Bayrak bir öğe bulunana kadar her öğe ve süreci durdurmak işleme gerek bu örneğin varsayalım. Eğer bayrak öğe eksikse bir istisna artırılmalıdır.

...Başka Python kullanarak inşa

...

for i in mylist:
    if i == theflag:
        break
    process(i)
else:
    raise ValueError("List argument missing terminal flag.)

...

Bu sözdizimsel şeker kullanmayan bir yöntem ile karşılaştırın:

...

flagfound = False
for i in mylist:
    if i == the flag:
        flagfound = True
        break
    process(i)

if not flagfound:
    raise ValueError("List argument missing terminal flag.)

...

İlk durumda raise sıkı çalışır döngü bağlıdır. İkinci olarak bağlayıcı değil, güçlü ve hatalara bakım sırasında ortaya çıkabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011
  • Skrillex

    Skrillex

    6 NİSAN 2010
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007