Python Segera/Python Segera: Perbezaan antara semakan

Kandungan dihapus Kandungan ditambah
Aurora (bincang | sumb.)
Algazel (bincang | sumb.)
→‎Objek dan Perkara Lain: kembang, selesai
Baris 260:
b.cetak_saya()
 
</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):
result = ""
for element in self.contents:
result = result + " " + `element`
return "Contains:"+result
</source>
 
Sekarang, jika kita mahun mencetak bakul b, kita boleh gunakan:
<source lang="python">
print b
</source>
''Cool'', bukan?
 
Membuat subkelas dilakukan begini:
 
<source lang="python">
class SpamBakul(Bakul):
# ...
</source>
 
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()
</source>
 
Seperti yang saya katakan, pembina dixipta dengan memberi definisi fungsi khas ahli __init__. Katakan
SpamBakul mempunyai pembina <code>__init__(self,type)</code>. Anda kemudiannya dapat membuat spam bakul begini:
 
<source lang="python">
y = SpamBakul("apel").
</source>
 
Jika anda, dalam pembina SpamBakul perlu memanggil pembina buat satu atau lebih ''superclass'', anda dapat melakukannya begini:
<source lang="python">
Basket.__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 ...
 
Hanya beberapa perkara pada akhir tutorial. Kebanyakan fungsi dan kelas yang berguna diletakkan dalam modul, yang sebenarnya fail teks yang mengandungi kod Python. Anda boleh mengimport modul-modul ini dan menggunanya dalam program anda. Misalnya, untuk mengguna ''"split"'' daripada modul ''"string"'', anda boleh lakukan sama ada:
 
<source lang="python">
import string
 
x = string.split(y)
</source>
 
atau ...
 
<source lang="python">
from string import split
 
x = split(y)
</source>
 
Nota: Modul ''string'' jarang digunakan sekarang; anda seharusnya menggunakan <code>x=y.split()</code>. Untuk maklumat lanjut tentang modul perpustakaan piawai, lihat www.python.org/doc/lib. Dokumen ini mengandungi banyak perkara yang berguna.
 
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()
 
</source>
 
Ini cara magis untuk mengatakan yang jika modul ini dilaksana sebagai skrip boleh laku (''executable script'') (yakni, ia tidak diimport ke dalam skrip yang lain), fungsi <code>go</code> harus dipanggil. Sudah tentu, anda boleh meletakkan apa sahaja selepas tanda titik berganda... :)
 
Dan, buat sesiapa yang mahu membuat skrip boleh laku pada sistem UN*X, gunakan baris pertama ini untuk membolehkannya terlaksana sendiri:
 
<source lang="python">
#!/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.
 
Jika tidak ada apa-apa yang dilakukan dengan pengecualian, program anda terhenti dan mencetak pesanan ralat. Anda dapat mengelak ini daripada berlaku dengan menggunakan pernyataan <code>try/except</code>. Sebagai contoh:
 
<source lang="python">
def pembahagian_selamat(a,b): #P: definisi fungsi
try:
return a/b
except ZeroDivisionError:
return None
<source>
 
<code>ZeroDivisionError 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">
try:
pembahagian_tak_selamat(a,b)
except ZeroDivisionError:
print "Sesuatu yang dibahagikan dengan sifar dalam pembahagian_tak_selamat"
 
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.
 
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
sementara belum terlaksana:
# lelaran sehingga "break"
 
sementara belum terlaksana:
# Hanya dilakukan jika gelung pertama tidak menetapkan "done" pada 1
</source>
 
Kod sama, mungkin lebih jelas, tetapi saya kira kurang cantik adalah:
 
<source lang="python">
sementara belum terlaksana: #P: pseudokod
while 1:
# lelaran sehingga "break"
 
jika belum terlaksana:
while 1:
# Hanya dilaksanakan jika gelung pertama tidak menetapkan "done" pada 1
 
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.
 
Contoh-contoh tambahan dapat dilihat di laman [http://www.strout.net/info/coding/python/tidbits.html ''tidbit''] milik Joe Strout.
 
[[Kategori:Python Segera|Python Segera]]