Python Segera/Python Segera: Perbezaan antara semakan

Kandungan dihapus Kandungan ditambah
Algazel (bincang | sumb.)
→‎Objek dan Perkara Lain: kembang, selesai
Algazel (bincang | sumb.)
k →‎Objek dan Perkara Lain: kemas pemformatan
Baris 229:
print a or b
</source>
 
 
Sebenarnya, ini merupakan idiom Python, jadi eloklah anda membiasakan diri dengannya. Inilah yang kita lakukan dalam Bakul.__init__. Kandungan argumen memiliki nilai lalai <code>None</code> (yang antara lain, bermaksud nilai palsu). Jadi, untuk memeriksa sama ada ia memiliki nilai, kita boleh tulis:
Baris 262 ⟶ 261:
</source>
Terdapat ''method'' magis lain selain daripada __init__. Satu daripadanya ialah __str__ yang memberi definisi bagaimana objek akan kelihatan jika ia dibuat seperti rentetan. Kita dapat menggunakan ini untuk bakul kita selain daripada cetak_saya:
 
<source lang="python">
def __str__(self):
Baris 271:
 
Sekarang, jika kita mahun mencetak bakul b, kita boleh gunakan:
 
<source lang="python">
print b
</source>
 
''Cool'', bukan?
 
Baris 284 ⟶ 286:
 
Python membenarkan pewarisan berganda (''multiple inheritance''), jadi anda boleh membuat beberapa kelas super (''superclass'') yang diletakkan dalam kurungan dan diasingankan dengan koma. Penseketikaan (''instantiation'') kelas dilakukan begini:
 
<source lang="python">
x = Bakul()
Baris 296 ⟶ 299:
 
Jika anda, dalam pembina SpamBakul perlu memanggil pembina buat satu atau lebih ''superclass'', anda dapat melakukannya begini:
 
<source lang="python">
BasketBakul.__init__(self).
</source>
 
Perhatikan yang anda perlu membekalkan <code>self</code> secara tersurat selain daripada membekalkan parameter biasa, oleh sebab <code>__init__</code> ''superclass'' tidak mengetahui tika (''instance'') mana yang dimaksudkan.
 
 
Dan sekarang ...
Baris 324 ⟶ 327:
 
Semua kod dalam modul/skrip dilaksanakan apabila diimport. Jika anda mahu program anda menjadi modul yang dapat diimport dan juga sebuah program yang dapat terlaksana, anda mungkin mahu meletakkan sesuatu seperti ini pada penghujung program anda:
 
<source lang="python">
if __name__ == "__main__": go()
Baris 336 ⟶ 340:
#!/usr/bin/env python
</source>
 
 
Akhir sekali, sedikit maklumat tentang satu konsep penting: Pengecualian (''Exceptions''). Sesetengah operasi (seperti pembahagian sesuatu dengan sifar ataupun membaca daripada fail yang tak wujud) akan menimbulkan ralat atau pengecualian. Anda juga dapat membuat ataupun menimbulkan pengecualian anda sendiri pada tempat-tempat yang bersesuaian dalam kod anda.
Baris 348 ⟶ 351:
except ZeroDivisionError:
return None
</source>
 
<code>ZeroDivisionError</code> ialah pengecualian piawai. Dalam kes ini, anda boleh semak sama ada b itu sifar, tetapi dalam banyak kes, strategi ini tidak dapat dilaksanakan. Lagipun, jika kita tidak memiliki klausa <code>try</code> dalam <code>pembahagian_selamat</code>, dan dengan itu membuatnya satu panggilan yang berisiko, kita masih boleh lakukan sesuatu seperti ini:
 
<source lang="python">
Baris 357 ⟶ 360:
except ZeroDivisionError:
print "Sesuatu yang dibahagikan dengan sifar dalam pembahagian_tak_selamat"
</source>
 
Dalam kes-kes yang tidak sepatutnya menimbulkan masalah spesifik, akan tetapi masalah itu mungkin berlaku, penggunaan pengecualian dapat membolehkan anda untuk mengelak daripada terpaksa melakukan ujian-ujian dan sebagainya.
Baris 362 ⟶ 366:
Bailkah, itu sahaja. Saya harap anda telah mempelajari sesuatu. Sekaran pergi bermain dengan Python. Dan ingatlah moto pembelajaran Python:''Use the source, Luke.'' (P: "Gunakan sumber, Luke") (Terjemahan:
Baca semua kod yang anda jumpa :)) Untuk bermula, ini sebuah contoh. Ia algoritme "QuickSort" yang terkenal oleh Hoare.
 
Satu perkara perlu dinayatakan tentang contoh ini. Pemboleh ubah <code>done</code> (baris 20) mengawal sama ada sekatan sudah selesai menggerakkan unsur. Jadi apabila satu daripada dua gelung dalaman mahu mengakhiri jujukan silih, ia menetapkan <code>done</code> kepada 1 dan kemudiannya keluar dengan <code>break</code> (baris 28, 39 dan 43 dalam kod). Mengapa gelung dalaman menggunakan <code>break</code>? Oleh sebab apabila gelung dalaman pertama berakhir dengan <code>break<//code>, persoalan sama ada gelung berikutnya bermula atau tidak bergantung pada gelung utama sudah berakhir, iaitu, sama ada <code>done</code> telah ditetapkan kepada 1:
 
<source lang="python">
sementara belum terlaksana: #P: pseudokod
Baris 384 ⟶ 388:
while 1:
# Hanya dilaksanakan jika gelung pertama tidak menetapkan "done" pada 1
</source>
 
Sebab saya gunakan pemboleh ubah <code>done</code> dalam gelung pertama adalah saya mahu mengekalkan simetri antara kedua-dua gelung. Dengan cara ini kita dapat membalikkan susunan gelung dan algoritme masih akan bekerja.