Saya perhatikan kode berikut legal di Python. Pertanyaan saya adalah mengapa? Apakah ada alasan khusus?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Saya perhatikan kode berikut legal di Python. Pertanyaan saya adalah mengapa? Apakah ada alasan khusus?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
else
untuk penggunaan ini adalah ide yang sangat buruk, dan bahwa mereka tidak akan melakukan ini lagi.after:
.Jawaban:
The
else
klausul hanya dijalankan ketika Andawhile
kondisi menjadi palsu. Jika Andabreak
keluar dari loop, atau jika pengecualian muncul, itu tidak akan dieksekusi.Salah satu cara untuk memikirkannya adalah sebagai konstruksi if / else sehubungan dengan kondisi:
analog dengan konstruk pengulangan:
Contohnya mungkin di sepanjang baris:
sumber
while {} something
kecuali bahwasomething
akan dilewati jika Andabreak
diwhile
loop.The
else
klausul dijalankan jika Anda keluar blok biasanya, dengan memukul kondisi loop atau jatuh dari bagian bawah blok try. Itu tidak dieksekusi jika Andabreak
ataureturn
keluar dari blok, atau menaikkan pengecualian. Ini berfungsi tidak hanya untuk sementara dan untuk loop, tetapi juga mencoba blok.Anda biasanya menemukannya di tempat-tempat di mana biasanya Anda akan keluar dari loop lebih awal, dan lari dari ujung loop adalah peristiwa yang tidak terduga / tidak biasa. Misalnya, jika Anda mengulang daftar mencari nilai:
sumber
found_it=False
di awal perulangan, dan kemudian melakukan pemeriksaan if padafound_it
akhirnyaSebagai balasannya
Is there a specific reason?
, berikut adalah satu aplikasi menarik: keluar dari beberapa level perulangan.Inilah cara kerjanya: loop luar memiliki jeda di bagian akhir, jadi itu hanya akan dieksekusi sekali. Namun, jika loop dalam selesai (tidak menemukan pembagi), maka ia mencapai pernyataan lain dan istirahat luar tidak pernah tercapai. Dengan cara ini, pemutusan pada loop dalam akan keluar dari kedua loop, bukan hanya satu.
Untuk keduanya
while
danfor
loop,else
pernyataan dieksekusi di akhir, kecualibreak
digunakan.Dalam kebanyakan kasus ada cara yang lebih baik untuk melakukan ini (membungkusnya menjadi fungsi atau menaikkan pengecualian), tetapi ini berhasil!
sumber
Klausa lain dijalankan ketika kondisi-sementara bernilai false.
Dari dokumentasi :
sumber
Jawaban saya akan fokus pada KAPAN kita bisa menggunakan while / for-else.
Sepintas, sepertinya tidak ada yang berbeda saat menggunakan
dan
Karena
print 'ELSE'
pernyataan sepertinya selalu dieksekusi dalam kedua kasus (baik ketikawhile
loop selesai atau tidak berjalan).Kemudian, itu hanya berbeda ketika pernyataan
print 'ELSE'
itu tidak akan dieksekusi. Itu ketika adabreak
di dalam blok kode di bawahwhile
Jika berbeda dengan:
return
tidak termasuk dalam kategori ini, karena ini memiliki efek yang sama untuk dua kasus di atas.kenaikan gaji juga tidak menyebabkan perbedaan, karena ketika naik, di mana kode berikutnya akan dieksekusi dalam pengecualian handler (kecuali blok), kode dalam
else
klausa atau tepat setelahwhile
klausa tidak akan dieksekusi.sumber
Saya tahu ini pertanyaan lama tapi ...
Seperti yang dikatakan Raymond Hettinger, itu harus disebut
while/no_break
bukanwhile/else
.Saya merasa mudah untuk memahami dan jika Anda melihat potongan ini.
Sekarang alih-alih memeriksa kondisi setelah while, kita dapat menukarnya dengan
else
dan menyingkirkan cek itu.Saya selalu membacanya
while/no_break
untuk memahami kode dan sintaks yang lebih masuk akal bagi saya.sumber
Klausa lain hanya dijalankan ketika kondisi sementara menjadi salah.
Berikut ini beberapa contohnya:
Contoh 1: Awalnya kondisinya salah, jadi klausa lain dijalankan.
KELUARAN:
Contoh 2: Kondisi -sementara
i < 5
tidak pernah menjadi salah karenai == 3
memutus loop, jadi klausa lain tidak dijalankan.KELUARAN:
Contoh 3: Kondisi -sementara
i < 5
menjadi salah ketikai
itu5
, jadi klausa lain dieksekusi.KELUARAN:
sumber
The
else:
pernyataan dieksekusi jika dan hanya jika loop sementara tidak lagi memenuhi kondisinya (dalam contoh Anda, ketikan != 0
palsu).Jadi hasilnya akan seperti ini:
sumber
Lain dijalankan jika loop tidak pecah.
Saya agak suka memikirkannya dengan metafora 'pelari'.
"Lain" seperti melintasi garis finish, tidak relevan apakah Anda mulai di awal atau di akhir trek. "lain" hanya tidak dieksekusi jika Anda menerobos suatu tempat di antaranya.
Kasus-kasus penggunaan utama menggunakan pemecahan ini dari loop bersarang atau jika Anda ingin menjalankan beberapa pernyataan hanya jika loop tidak pecah di suatu tempat (pikirkan melanggar menjadi situasi yang tidak biasa).
Misalnya, berikut ini adalah mekanisme tentang cara keluar dari loop dalam tanpa menggunakan variabel atau mencoba / menangkap:
sumber
Penggunaan lebih baik dari 'while: else:' konstruksi dengan Python seharusnya jika tidak ada loop dieksekusi di 'while' maka pernyataan 'lain' dieksekusi. Cara kerjanya hari ini tidak masuk akal karena Anda dapat menggunakan kode di bawah ini dengan hasil yang sama ...
sumber
else
blok tidak akan dieksekusi jika Anda meninggalkan loop menggunakanbreak
ataureturn
kata kunci. Dalam contoh Anda,print
akan dieksekusi juga jika loop telah berakhir padabreak
perintah.Ini berguna untuk interaksi sosial.
sumber
else
sini? Kode melakukan hal yang persis sama tanpanya.break
Anda selama hitung mundur, tidak menggunakanelse
akan membuat Anda mengatakan "Selamat tahun baru!" langsung yang tidak masuk akal.break
"? Tidak adabreak
dalam kode.