Tutorial Python untuk bukan pengatur cara/Fungsi: Perbezaan antara semakan

Kandungan dihapus Kandungan ditambah
Aurora (bincang | sumb.)
Aurora (bincang | sumb.)
Baris 73:
<!-- Fungsi boleh digunakan untuk mengurangkan kod yang berulang-ulang. -->
 
=== PembolehubahPemboleh ubah di dalam fungsi ===
Apabila membuang kod yang berulang, biasanya akan ada pemboleh ubah di dalamnya. Dalam [[Python]], pemboleh ubah akan diuruskan dengan cara yang istimewa. Setakat ini, semua pemboleh ubah yang dipakai adalah sejagat (di dalam program utama, di luar fungsi).
Fungsi mempunyai sejenis pemboleh ubah istimewa yang dipanggil "pemboleh ubah setempat" (''local variable''). Pemboleh ubah jenis ini hanya akan wujud (secara maya) apabila fungsinya dipanggil/dijalankan.
Apabila pemboleh ubah setempat mempunyai nama yang sama dengan pemboleh ubah sejagat, pemboleh ubah setempat yang akan dipanggil. Mungkin sedikit memeningkan, sila lihat contoh di bawah untuk penjelasan:
 
<source lang="python">
<pre>
a_var = 10
b_var = 15
Baris 98:
print "c_var = ", c_var
print "d_var = ", d_var
</presource>
 
Akan menghasilkan:
Baris 114:
File "C:\Python24\def2", line 19, in -toplevel-
print "d_var = ", d_var
 
NameError: name 'd_var' is not defined
</pre>
 
DidalamDalam contoh ini, pembolehubahpemboleh ubah <code>a_var</code>, <code>b_var</code>, dan <code>d_var</code> adalah pembolehubahpemboleh ubah setempat, apabila berada didalamdi dalam fungsi <code>a_func</code>. Selepas kenyataan <code>return b_var + 10</code> dijalankan, keempat-empat pembolehubahpemboleh ubah tadi akan lenyap. PembolehubahPemboleh ubah <code>a_var</code> akan secara automatik menjadi pembolehubahpemboleh ubah setempat kerana ia adalah parameter kepada fungsi <code>a_func</code>. PembolehubahPemboleh ubah <code>b_var</code> dan <code>d_var</code> juga adalah pembolehubahpemboleh ubah setempat kerana kedua-duanya berada disebelahdi sebelah kiri tanda <code>=</code> didalamdi dalam pernyataan <code>b_var = 100 + a_var</code> anddan <code>d_var = 2 * a_var</code>.
 
Semasa didalamdi dalam fungsi, <code>a_var</code> = 15 kerana fungsi tersebut dipanggil dengan <code>a_func(b_var)</code>. Disebabkan semasa itu <code>b_var</code> = 15, maka panggilan kepada fungsi tersebut menjadi <code>a_func(15)</code>. Ini menyebabkan <code>a_var</code> menjadi 15 semasa ia berada didalamdi dalam <code>a_func</code>.
 
Seperti yang dapat dilihat, sebaik sahaja fungsi <code>a_func</code> habis dijalankan, pembolehubahpemboleh ubah setempat <code>a_var</code> dan <code>b_var</code> akan hilang dan digantikan dengan pembolehubahpemboleh ubah yang asal. Kenyataan <code>print "a_var = ", a_var</code> akan memaparkan nilai <code>10</code> (bukan <code>15</code>) kerana pembolehubahpemboleh ubah setempat telah hilang.
 
Perhatikan juga <code>NameError</code> yang berlaku. PembolehubahPemboleh ubah <code>d_var</code> tidak lagi wujud kerana <code>a_func</code> telah habis dijalankan. Jika terdapat nilai yang dikehendaki dari sesuatu fungsi, bolehlah menggunakan <code>return</code>, contohnya <code>return a_var</code>.
 
Satu perkara lagi, perhatikan nilai <code>e_var</code> yang tidak berubah semasa didalamdi dalam <code>a_func</code> kerana ia tidak menjadi parameter dan tiada kenyataan didalamdi dalam fungsi tersebut yang mengubah nilainya.
 
Sesuatu fungsi membenarkan pembolehubahpemboleh ubah setempat wujud hanya didalamdi dalam fungsi itu sahaja. Ia juga akan menyorokkan pembolehubahpemboleh ubah yang mempunyai nama yang sama diluardi luar fungsi tersebut.
 
=== Contoh ===