Saya sedang dalam proses belajar Python dan saya telah mencapai bagian tentang pass
pernyataan itu. Panduan yang saya gunakan mendefinisikannya sebagai Null
pernyataan yang biasa digunakan sebagai pengganti.
Saya masih belum sepenuhnya mengerti apa artinya itu. Dapatkah seseorang menunjukkan kepada saya situasi sederhana / dasar di mana pass
pernyataan itu akan digunakan dan mengapa itu diperlukan?
pass
akan berguna ketika Anda ingin mengganti metode dalam subkelas untuk tidak melakukan apa pun.pass
,except
blok sangat berguna.Jawaban:
Misalkan Anda sedang merancang kelas baru dengan beberapa metode yang belum ingin Anda terapkan, belum.
Jika Anda meninggalkan
pass
kode, kode tidak akan berjalan.Anda kemudian akan mendapatkan:
Untuk meringkas,
pass
pernyataan itu tidak melakukan hal tertentu, tetapi dapat bertindak sebagai pengganti, seperti yang ditunjukkan di sini.sumber
return
, meskipun dengan sedikit kehilangan kejelasan.pass
, tapi saya masih tidak begitu mengerti apa fungsinya. Apakah ada gunanya untuk ini dalam kode produksi? Dari contoh Anda, saya akan memilih untuk tidak menambahkan metode itu sampai saya siap untuk mengimplementasikannya, atau saya hanya akan melakukannyareturn
.Python memiliki persyaratan sintaksis yang blok kode (setelah
if
,except
,def
,class
dll) tidak bisa menjadi kosong. Namun blok kode kosong berguna dalam berbagai konteks yang berbeda, seperti dalam contoh di bawah ini, yang merupakan kasus penggunaan yang paling sering saya lihat.Oleh karena itu, jika tidak ada yang seharusnya terjadi dalam blok kode, a
pass
diperlukan agar blok tersebut tidak menghasilkanIndentationError
. Atau, pernyataan apa pun (termasuk hanya istilah yang akan dievaluasi, sepertiEllipsis
literal...
atau string, paling sering merupakan docstring) dapat digunakan, tetapipass
memperjelas bahwa memang tidak ada yang seharusnya terjadi, dan tidak perlu benar-benar dievaluasi dan (setidaknya sementara) disimpan dalam memori.Mengabaikan (semua atau) jenis tertentu
Exception
(contoh darixml
):Catatan: Mengabaikan semua jenis kenaikan gaji, seperti dalam contoh berikut dari
pandas
, umumnya dianggap praktik buruk, karena juga menangkap pengecualian yang mungkin harus diteruskan ke penelepon, misalnyaKeyboardInterrupt
atauSystemExit
(atau bahkanHardwareIsOnFireError
- Bagaimana Anda tahu Anda tidak berjalan pada kotak khusus dengan kesalahan spesifik yang ditentukan, yang ingin diketahui beberapa aplikasi panggilan?).Alih-alih menggunakan setidaknya
except Error:
atau dalam hal ini lebih disukaiexcept OSError:
dianggap praktik yang jauh lebih baik. Analisis cepat semua modul python yang saya pasang memberi saya bahwa lebih dari 10% dari semuaexcept ...: pass
pernyataan menangkap semua pengecualian, jadi ini masih merupakan pola yang sering terjadi dalam pemrograman python.Turunkan kelas pengecualian yang tidak menambahkan perilaku baru (misalnya dalam
scipy
):Demikian pula, kelas yang dimaksudkan sebagai kelas dasar abstrak sering memiliki metode kosong
__init__
atau metode eksplisit lain yang seharusnya diturunkan. (mis.pebl
)Menguji kode tersebut berjalan dengan benar untuk beberapa nilai pengujian, tanpa memedulikan hasil (dari
mpmath
):Dalam definisi kelas atau fungsi, seringkali docstring sudah ada sebagai pernyataan wajib untuk dieksekusi sebagai satu-satunya hal dalam blok. Dalam kasus seperti itu, blok dapat berisi
pass
selain docstring untuk mengatakan "Ini memang dimaksudkan untuk tidak melakukan apa pun.", Misalnya dalampebl
:Dalam beberapa kasus,
pass
digunakan sebagai pengganti untuk mengatakan "Metode / kelas / jika-blok / ini ... belum dilaksanakan, tetapi ini akan menjadi tempat untuk melakukannya", meskipun saya pribadi lebih suka yangEllipsis
literal...
untuk benar-benar membedakan antara ini dan "no-op" yang disengaja dalam contoh sebelumnya. ( Perhatikan bahwa literal Ellipsis adalah ekspresi yang valid hanya dengan Python 3 )Sebagai contoh, jika saya menulis model dengan sapuan lebar, saya mungkin menulis
di mana orang lain mungkin memiliki
sebelum
sebagai pengingat untuk mengisi
update_agent
fungsi di kemudian hari, tetapi jalankan beberapa tes untuk melihat apakah sisa kode berperilaku sebagaimana dimaksud. (Opsi ketiga untuk kasus ini adalahraise NotImplementedError
. Ini berguna khususnya untuk dua kasus: Baik “Metode abstrak ini harus diimplementasikan oleh setiap subkelas, tidak ada cara umum untuk mendefinisikannya dalam kelas dasar ini” , atau “Fungsi ini, dengan nama ini, belum diimplementasikan dalam rilis ini, tetapi ini akan terlihat seperti apa tanda tangannya ” )sumber
Selain penggunaannya sebagai pengganti untuk fungsi yang tidak diterapkan,
pass
dapat berguna dalam mengisi pernyataan if-else ("Eksplisit lebih baik daripada implisit.")Tentu saja, dalam hal ini, seseorang mungkin akan menggunakan
return
alih-alih penugasan, tetapi dalam kasus di mana mutasi diinginkan, ini berfungsi paling baik.Penggunaan di
pass
sini sangat berguna untuk memperingatkan pengelola masa depan (termasuk Anda sendiri!) Untuk tidak menempatkan langkah-langkah yang berlebihan di luar pernyataan bersyarat. Pada contoh di atas,flag
diatur dalam dua kasus yang disebutkan secara khusus, tetapi tidak dielse
-case. Tanpa menggunakanpass
, programmer masa depan mungkin pindahflag = True
ke luar kondisi — dengan demikian pengaturanflag
dalam semua kasus.Lain halnya dengan fungsi boilerplate yang sering terlihat di bagian bawah file:
Dalam beberapa file, mungkin lebih baik meninggalkannya di sana
pass
untuk memungkinkan pengeditan lebih mudah nanti, dan untuk membuat eksplisit bahwa tidak ada yang diharapkan terjadi ketika file dijalankan sendiri.Akhirnya, seperti yang disebutkan dalam jawaban lain, bisa bermanfaat untuk tidak melakukan apa pun ketika ada pengecualian yang tertangkap:
sumber
flag = False
sebelumif ... elif
blok untuk mencegah kesalahan "NameError: name 'flag' tidak didefinisikan" di kemudian hari. Mengenai contoh kedua, sepertinya bizzar harus menambahkanif __name__ == "__main__": pass
sebagian besar file Python yang tidak melakukan anythng ketika dieksekusi langsung (yang merupakan kasus ketika Anda menulis kode modular). Dengan Python> = 3.0, Anda harus menggunakan...
(Ellipsis) alih-alihpass
menunjukkan blok "selesai nanti".Cara terbaik dan paling akurat untuk dipikirkan
pass
adalah sebagai cara untuk secara eksplisit memberitahu juru bahasa untuk tidak melakukan apa pun. Dengan cara yang sama kode berikut:berarti "jika saya memanggil fungsi foo (x, y), jumlahkan dua angka yang diwakili label x dan y dan kembalikan hasilnya",
berarti "Jika saya memanggil bilah fungsi (), jangan lakukan apa pun."
Jawaban lainnya cukup benar, tetapi juga berguna untuk beberapa hal yang tidak melibatkan penahanan tempat.
Sebagai contoh, dalam sedikit kode yang saya kerjakan baru-baru ini, perlu membagi dua variabel, dan mungkin pembagi menjadi nol.
akan, jelas, menghasilkan ZeroDivisionError jika b adalah nol. Dalam situasi khusus ini, meninggalkan c sebagai nol adalah perilaku yang diinginkan dalam kasus b adalah nol, jadi saya menggunakan kode berikut:
Lain, penggunaan kurang standar adalah sebagai tempat yang berguna untuk meletakkan breakpoint untuk debugger Anda. Sebagai contoh, saya ingin sedikit kode untuk masuk ke debugger pada iterasi ke-20 dari ... dalam pernyataan. Begitu:
dengan breakpoint on pass.
sumber
def bar(): pass
tidak melakukan "sama sekali tidak ada". Itu masih kembaliNone
, secara implisit.Kasus penggunaan umum di mana ia dapat digunakan 'apa adanya' adalah menimpa kelas hanya untuk membuat tipe (yang sebaliknya sama dengan superclass), misalnya
Jadi Anda bisa menaikkan dan menangkap
Error
pengecualian. Yang penting di sini adalah jenis pengecualian, bukan kontennya.sumber
pass
pada Python pada dasarnya tidak melakukan apa-apa, tetapi tidak seperti komentar itu tidak diabaikan oleh penerjemah. Jadi Anda bisa memanfaatkannya di banyak tempat dengan menjadikannya tempat penampung:1: Dapat digunakan di kelas
2: Dapat digunakan dalam pernyataan loop dan kondisional:
3: Dapat digunakan dalam fungsi:
pass
sebagian besar digunakan ketika programmer tidak ingin memberikan implementasi saat ini tetapi masih ingin membuat kelas / fungsi / pernyataan kondisional tertentu yang dapat digunakan nanti. Karena interpreter Python tidak memungkinkan untuk pernyataan class / function / conditional kosong atau tidak diimplementasikan, ia memberikan kesalahan:pass
dapat digunakan dalam skenario seperti itu.sumber
Anda dapat mengatakan bahwa operan berarti operasi NOP (Tanpa Operasi). Anda akan mendapatkan gambar yang jelas setelah contoh ini: -
Program C
Sekarang bagaimana Anda akan menulis itu dengan Python: -
Tetapi kode Anda akan memberikan kesalahan karena diperlukan blok berlekuk setelah elif . Inilah peran kata kunci pass .
Sekarang saya pikir itu jelas bagi Anda.
sumber
&&
Operator tidak ada di PythonSaya suka menggunakannya saat mematikan tes. Saya sering kali menyadari apa yang ingin saya uji tetapi tidak cukup tahu bagaimana melakukannya. Contoh pengujian seperti apa yang disarankan sebastian_oe
sumber
assert False
atauassert 0
dengan cara ini Anda akan selalu dicatat Anda harus menambahkan implementasi :)Pernyataan lulus tidak melakukan apa pun. Ini dapat digunakan ketika pernyataan diperlukan secara sintaksis tetapi program tidak memerlukan tindakan.
sumber
Jujur, saya pikir dokumen resmi Python menggambarkannya dengan cukup baik dan memberikan beberapa contoh:
sumber
seperti kata buku itu, saya hanya pernah menggunakannya sebagai pengganti sementara, yaitu,
dan kemudian mengisi skenario di mana
var == 2000
sumber
Pass mengacu pada diabaikan .... sesederhana itu .... jika kondisi yang diberikan benar dan pernyataan berikutnya dilewati, mengabaikan nilai atau iterasi tersebut dan melanjutkan ke baris berikutnya ..... Contoh
Output: Mencetak semua angka ganjil dari 1-100
Ini karena modulus bilangan genap sama dengan nol, maka ia mengabaikan bilangan dan melanjutkan ke bilangan berikutnya, karena modulus bilangan ganjil tidak sama dengan nol. Bagian lain dari loop dieksekusi dan dicetak
sumber
SyntaxError
. Juga, ini bukan penggunaan yang baikpass
karena Anda bisa melakukannyafor i in range(1,100):print(i)if i%2else""
Berikut adalah contoh di mana saya mengekstraksi data tertentu dari daftar di mana saya memiliki beberapa tipe data (itulah yang saya sebut di R-- maaf jika itu tata nama yang salah) dan saya ingin mengekstrak hanya data integer / numerik dan BUKAN karakter. .
Data tampak seperti:
Saya ingin menghapus semua karakter alfabet, jadi saya meminta mesin melakukannya dengan mengatur ulang data, dan "melewatkan" data alfabet:
sumber
Pernyataan lulus dalam Python digunakan ketika pernyataan diperlukan secara sintaksis tetapi Anda tidak ingin perintah atau kode dieksekusi.
Pernyataan lulus adalah operasi nol; tidak ada yang terjadi ketika dijalankan. Pass ini juga berguna di tempat-tempat di mana kode Anda pada akhirnya akan pergi, tetapi belum ditulis (misalnya, di rintisan misalnya):
`Contoh:
Ini akan menghasilkan hasil sebagai berikut:
Kode sebelumnya tidak menjalankan pernyataan atau kode apa pun jika nilai hurufnya 'h'. Pernyataan pass berguna ketika Anda telah membuat blok kode tetapi tidak lagi diperlukan.
Anda kemudian dapat menghapus pernyataan di dalam blok tetapi membiarkan blok tetap dengan pernyataan lulus sehingga tidak mengganggu bagian lain dari kode.
sumber
pass digunakan untuk menghindari kesalahan lekukan di python Jika kita mengambil bahasa seperti c, c ++, java mereka memiliki kawat gigi seperti
Tetapi dalam python digunakan indentasi bukan kawat gigi sehingga untuk menghindari kesalahan seperti itu kami menggunakan pass. Ingat saat Anda sedang bermain kuis dan
Contoh program,
sumber