Prelude
Selamat datang di tutorial online Python Google. Kursus ini didasarkan pada kursus pengantar Python yang ditawarkan secara internal. Seperti yang disebutkan di halaman penyiapan, materi ini membahas Python 3.
Jika Anda mencari kursus MOOC pendamping, coba kursus dari Udacity dan Coursera (pengantar pemrograman [pemula] atau pengantar Python). Terakhir, jika Anda mencari pembelajaran online mandiri tanpa menonton video, coba yang tercantum di bagian akhir postingan ini — masing-masing menampilkan konten pembelajaran serta interpreter interaktif Python yang dapat Anda gunakan untuk berlatih. Apa yang dimaksud dengan "penerjemah" yang kami sebutkan? Anda akan mengetahuinya di bagian berikutnya.
Pengantar Bahasa
Python adalah bahasa dinamis yang diinterpretasikan (dikompilasi bytecode). Tidak ada deklarasi jenis variabel, parameter, fungsi, atau metode dalam kode sumber. Hal ini membuat kode menjadi pendek dan fleksibel, serta Anda kehilangan pemeriksaan jenis waktu kompilasi kode sumber. Python melacak jenis semua nilai saat runtime dan menandai kode yang tidak masuk akal saat dijalankan.
Cara terbaik untuk melihat cara kerja kode Python adalah dengan menjalankan interpreter Python dan mengetik kode langsung ke dalamnya. Jika Anda memiliki pertanyaan seperti, "Apa yang terjadi jika saya menambahkan int
ke list
?" Cukup ketikkan ke interpreter Python untuk melihat apa yang terjadi dengan cepat dan kemungkinan besar merupakan cara terbaik. (Lihat di bawah untuk melihat apa yang sebenarnya terjadi!)
$ python3 ## Run the Python interpreter Python 3.X.X (XXX, XXX XX XXXX, XX:XX:XX) [XXX] on XXX Type "help", "copyright", "credits" or "license" for more information. >>> a = 6 ## set a variable in this interpreter session >>> a ## entering an expression prints its value 6 >>> a + 2 8 >>> a = 'hi' ## 'a' can hold a string just as well >>> a 'hi' >>> len(a) ## call the len() function on a string 2 >>> a + len(a) ## try something that doesn't work Traceback (most recent call last): File "" , line 1, inTypeError: can only concatenate str (not "int") to str >>> a + str(len(a)) ## probably what you really wanted 'hi2' >>> foo ## try something else that doesn't work Traceback (most recent call last): File " " , line 1, inNameError: name 'foo' is not defined >>> ^D ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)
Dua baris yang dicetak python setelah Anda mengetik python dan sebelum perintah >>> memberi tahu Anda tentang versi python yang Anda gunakan dan tempat python tersebut dibuat. Selama hal pertama yang dicetak adalah "Python 3.", contoh ini akan berfungsi untuk Anda.
Seperti yang dapat Anda lihat di atas, bereksperimen dengan variabel dan operator sangatlah mudah. Selain itu, interpreter akan memunculkan, atau "menaikkan" dalam istilah Python, error runtime jika kode mencoba membaca variabel yang belum diberi nilai. Seperti C++ dan Java, Python peka huruf besar/kecil sehingga "a" dan "A" adalah variabel yang berbeda. Akhir baris menandai akhir pernyataan, sehingga tidak seperti C++ dan Java, Python tidak memerlukan titik koma di akhir setiap pernyataan. Komentar dimulai dengan '#' dan diperluas hingga akhir baris.
Kode sumber Python
File sumber Python menggunakan ekstensi ".py" dan disebut "modul". Dengan modul Python hello.py
, cara termudah untuk menjalankannya adalah dengan perintah shell "python hello.py Alice" yang memanggil interpreter Python untuk mengeksekusi kode di hello.py
, dengan meneruskan argumen command line "Alice".
Lihat halaman dokumen resmi tentang semua opsi berbeda yang Anda miliki saat menjalankan Python dari command line.
Berikut program hello.py
yang sangat sederhana (perhatikan bahwa blok kode dibatasi secara ketat menggunakan indentasi, bukan tanda kurung kurawal — akan dibahas lebih lanjut nanti):
#!/usr/bin/python3 # import modules used here -- sys is a very standard one import sys # Gather our code in a main() function def main(): print('Hello there', sys.argv[1]) # Command line args are in sys.argv[1], sys.argv[2] ... # sys.argv[0] is the script name itself and can be ignored # Standard boilerplate to call the main() function to begin # the program. if __name__ == '__main__': main()
Menjalankan program ini dari command line akan terlihat seperti:
$ python3 hello.py Guido Hello there Guido $ ./hello.py Alice ## without needing 'python3' first (Unix) Hello there Alice
Impor, Argumen command line, dan len()
Pernyataan terluar dalam file Python, atau "modul", melakukan penyiapan satu kali — pernyataan tersebut berjalan dari atas ke bawah saat modul diimpor untuk pertama kalinya di suatu tempat, menyiapkan variabel dan fungsinya. Modul Python dapat dijalankan secara langsung — seperti python3 hello.py Bob
di atas — atau dapat diimpor dan digunakan oleh modul lain. Saat file Python dijalankan secara langsung, variabel khusus "__name__" ditetapkan ke "__main__". Oleh karena itu, boilerplate if __name__ ==...
yang ditampilkan di atas biasanya memanggil fungsi main() saat modul dijalankan secara langsung, tetapi tidak saat modul diimpor oleh modul lain.
Dalam program Python standar, daftar sys.argv
berisi argumen command line dengan cara standar dengan sys.argv[0] adalah program itu sendiri, sys.argv[1] adalah argumen pertama, dan seterusnya. Jika Anda mengetahui argv
, atau jumlah argumen, Anda cukup meminta nilai ini dari Python dengan len(sys.argv)
, seperti yang kita lakukan dalam kode interpreter interaktif di atas saat meminta panjang string. Secara umum, len()
dapat memberi tahu Anda panjang string, jumlah elemen dalam daftar dan tuple (struktur data seperti array lainnya), dan jumlah pasangan nilai kunci dalam kamus.
Fungsi yang Ditentukan Pengguna
Fungsi di Python ditentukan seperti ini:
# Defines a "repeat" function that takes 2 arguments. def repeat(s, exclaim): """ Returns the string 's' repeated 3 times. If exclaim is true, add exclamation marks. """ result = s + s + s # can also use "s * 3" which is faster (Why?) if exclaim: result = result + '!!!' return result
Perhatikan juga bagaimana baris yang membentuk fungsi atau pernyataan if dikelompokkan dengan memiliki tingkat indentasi yang sama. Kami juga menyajikan 2 cara berbeda untuk mengulang string, menggunakan operator + yang lebih mudah digunakan, tetapi * juga berfungsi karena merupakan operator "repeat" Python, yang berarti '-' * 10
akan menghasilkan '----------'
, cara yang praktis untuk membuat "garis" di layar. Dalam komentar kode, kami mengisyaratkan bahwa * bekerja lebih cepat daripada +, karena * menghitung ukuran objek yang dihasilkan satu kali, sedangkan dengan +, penghitungan tersebut dilakukan setiap kali + dipanggil. + dan * disebut operator "yang kelebihan beban" karena memiliki arti yang berbeda untuk angka vs. untuk string (dan jenis data lainnya).
Kata kunci def
menentukan fungsi dengan parameternya dalam tanda kurung dan kode yang diindentasi. Baris pertama fungsi dapat berupa string dokumentasi ("docstring") yang menjelaskan fungsi tersebut. Docstring dapat berupa satu baris, atau deskripsi multi-baris seperti pada contoh di atas. (Ya, itu adalah "tanda petik tiga", fitur unik untuk Python!) Variabel yang ditentukan dalam fungsi bersifat lokal untuk fungsi tersebut, sehingga "result" dalam fungsi di atas terpisah dari variabel "result" dalam fungsi lain. Pernyataan return
dapat mengambil argumen, yang dalam hal ini adalah nilai yang ditampilkan ke pemanggil.
Berikut adalah kode yang memanggil fungsi repeat() di atas, yang mencetak apa yang ditampilkan:
def main(): print(repeat('Yay', False)) ## YayYayYay print(repeat('Woo Hoo', True)) ## Woo HooWoo HooWoo Hoo!!!
Saat runtime, fungsi harus ditentukan oleh eksekusi "def" sebelum dipanggil. Biasanya, fungsi main() didefinisikan di bagian bawah file dengan fungsi yang dipanggil di atasnya.
Indentasi
Salah satu fitur Python yang tidak biasa adalah indentasi spasi kosong pada sebuah kode memengaruhi artinya. Blok pernyataan logis seperti yang membentuk fungsi harus memiliki indentasi yang sama, yang ditetapkan dari indentasi fungsi induk atau "if" atau apa pun. Jika salah satu baris dalam grup memiliki indentasi yang berbeda, baris tersebut akan ditandai sebagai kesalahan sintaksis.
Penggunaan spasi di Python terasa sedikit aneh pada awalnya, tetapi logis dan saya mendapati bahwa saya terbiasa dengan cepat. Hindari penggunaan TAB karena sangat mempersulit skema indentasi (belum lagi TAB dapat berarti hal yang berbeda di platform yang berbeda). Setel editor Anda untuk menyisipkan spasi, bukan TAB, untuk kode Python.
Pertanyaan umum yang diajukan pemula adalah, "Berapa banyak spasi yang harus saya gunakan untuk indentasi?" Menurut panduan gaya Python resmi (PEP 8), Anda harus melakukan indentasi dengan 4 spasi. (Fakta menarik: Pedoman gaya internal Google menentukan indentasi dengan 2 spasi.)
Kode Diperiksa saat Runtime
Python tidak banyak melakukan pemeriksaan pada waktu kompilasi, menunda hampir semua pemeriksaan jenis, nama, dll. pada setiap baris hingga baris tersebut berjalan. Misalkan main() di atas memanggil repeat() seperti ini:
def main(): if name == 'Guido': print(repeeeet(name) + '!!!') else: print(repeat(name))
Pernyataan if berisi error yang jelas, di mana fungsi repeat() secara tidak sengaja diketik sebagai repeeeet(). Hal yang lucu di Python ... kode ini dikompilasi dan berjalan dengan baik selama nama saat runtime bukan 'Guido'. Hanya saat mencoba menjalankan repeeeet(), proses akan menyadari bahwa tidak ada fungsi seperti itu dan memunculkan error. Ada juga error kedua dalam cuplikan ini; name tidak diberi nilai sebelum dibandingkan dengan 'Guido'. Python akan memunculkan 'NameError' jika Anda mencoba mengevaluasi variabel yang belum ditetapkan. Berikut beberapa contoh yang menunjukkan bahwa saat pertama kali menjalankan program Python, beberapa error pertama yang Anda lihat adalah kesalahan ketik sederhana atau variabel yang belum diinisialisasi seperti ini. Ini adalah salah satu area di mana bahasa dengan sistem jenis yang lebih verbose, seperti Java, memiliki keunggulan ... bahasa tersebut dapat mendeteksi error semacam itu pada waktu kompilasi (tetapi tentu saja Anda harus mempertahankan semua informasi jenis tersebut ... ini adalah pertukaran).
Python 3 memperkenalkan petunjuk jenis.
Petunjuk jenis memungkinkan Anda menunjukkan jenis untuk setiap argumen dalam fungsi serta
jenis objek yang ditampilkan oleh fungsi.
Misalnya, dalam fungsi beranotasi def is_positive(n: int) -> bool:
, argumen
n
adalah int
dan nilai yang ditampilkan adalah bool
.
Kita akan membahas arti jenis ini nanti. Namun, petunjuk jenis sepenuhnya bersifat opsional.
Anda akan melihat semakin banyak kode yang mengadopsi petunjuk jenis karena jika Anda menggunakannya, beberapa editor seperti cider-v dan VS.code dapat menjalankan pemeriksaan untuk memverifikasi bahwa fungsi Anda dipanggil dengan jenis argumen yang tepat. Mereka bahkan dapat menyarankan dan memvalidasi argumen saat Anda mengedit kode.
Tutorial ini tidak akan membahas petunjuk jenis, tetapi kami ingin memastikan Anda mengetahuinya jika Anda mendengarnya atau melihatnya di tempat lain.
Nama Variabel
Karena variabel Python tidak memiliki jenis yang dieja dalam kode sumber, sebaiknya beri nama yang bermakna pada variabel Anda untuk mengingatkan diri Anda tentang apa yang sedang terjadi. Jadi, gunakan "name" jika berupa satu nama, "names" jika berupa daftar nama, dan "tuples" jika berupa daftar tuple. Banyak error Python dasar terjadi karena lupa jenis nilai yang ada di setiap variabel, jadi gunakan nama variabel Anda (yang benar-benar Anda miliki) untuk membantu menjaga semuanya tetap teratur.
Sejauh menyangkut penamaan sebenarnya, beberapa bahasa lebih memilih underscored_parts untuk nama variabel yang terdiri dari "lebih dari satu kata", tetapi bahasa lain lebih memilih camelCasing. Secara umum, Python lebih memilih metode garis bawah, tetapi memandu developer untuk menggunakan camelCase jika berintegrasi ke dalam kode Python yang sudah menggunakan gaya tersebut. Keterbacaan penting. Baca selengkapnya di bagian tentang konvensi penamaan di PEP 8.
Seperti yang dapat Anda duga, kata kunci seperti 'if' dan 'while' tidak dapat digunakan sebagai nama variabel — Anda akan mendapatkan error sintaksis jika melakukannya. Namun, berhati-hatilah untuk tidak menggunakan bawaan sebagai nama variabel. Misalnya, meskipun 'str', 'list', dan 'print' mungkin tampak seperti nama yang bagus, Anda akan mengganti variabel sistem tersebut. Built-in bukan kata kunci sehingga rentan terhadap penggunaan yang tidak disengaja oleh developer Python baru.
Selengkapnya tentang Modul dan Namespace-nya
Misalkan Anda memiliki modul "binky.py" yang berisi "def foo()". Nama fungsi foo yang sepenuhnya memenuhi syarat adalah "binky.foo". Dengan cara ini, berbagai modul Python dapat menamai fungsi dan variabelnya sesuai keinginan, dan nama variabel tidak akan berkonflik — module1.foo berbeda dengan module2.foo. Dalam kosakata Python, kita akan mengatakan bahwa binky, module1, dan module2 masing-masing memiliki "namespace" sendiri, yang seperti yang dapat Anda tebak adalah binding nama variabel ke objek.
Misalnya, kita memiliki modul "sys" standar yang berisi beberapa fasilitas sistem standar, seperti daftar argv, dan fungsi exit(). Dengan pernyataan "import sys", Anda kemudian dapat mengakses definisi dalam modul sys dan membuatnya tersedia berdasarkan nama yang sepenuhnya memenuhi syarat, misalnya sys.exit(). (Ya, 'sys' juga memiliki namespace!)
import sys # Now can refer to sys.xxx facilities sys.exit(0)
Ada formulir impor lain yang terlihat seperti ini: "from sys import argv, exit". Hal ini membuat argv dan exit() tersedia berdasarkan nama singkatnya; namun, sebaiknya gunakan bentuk asli dengan nama yang sepenuhnya memenuhi syarat karena jauh lebih mudah untuk menentukan dari mana fungsi atau atribut berasal.
Ada banyak modul dan paket yang disertakan dengan penginstalan standar interpreter Python, sehingga Anda tidak perlu melakukan tindakan tambahan untuk menggunakannya. Ini secara keseluruhan dikenal sebagai "Python Standard Library". Modul/paket yang umum digunakan meliputi:
- sys — akses ke exit(), argv, stdin, stdout, ...
- re — ekspresi reguler
- os — antarmuka sistem operasi, sistem file
Anda dapat menemukan dokumentasi semua modul dan paket Standard Library di http://docs.python.org/library.
Bantuan online, help()
, dan dir()
Ada berbagai cara untuk mendapatkan bantuan terkait Python.
- Lakukan penelusuran Google, dimulai dengan kata "python", seperti "python list" atau "python string lowercase". Hasil pertama sering kali merupakan jawabannya. Teknik ini tampaknya berfungsi lebih baik untuk Python daripada bahasa lain karena alasan tertentu.
- Situs dokumentasi Python resmi — docs.python.org — memiliki dokumentasi berkualitas tinggi. Namun, saya sering kali mendapati bahwa penelusuran Google dengan beberapa kata lebih cepat.
- Ada juga milis Tutor resmi yang dirancang khusus untuk mereka yang baru mengenal Python dan/atau pemrograman.
- Banyak pertanyaan (dan jawaban) dapat ditemukan di StackOverflow dan Quora.
- Gunakan fungsi help() dan dir() (lihat di bawah).
Di dalam interpreter Python, fungsi help() akan menampilkan string dokumentasi untuk berbagai modul, fungsi, dan metode. String doc ini mirip dengan javadoc Java. Fungsi dir() memberi tahu Anda atribut objek. Berikut beberapa cara untuk memanggil help() dan dir() dari interpreter:
help(len)
— string bantuan untuk fungsilen()
bawaan; perhatikan bahwa ini adalah "len" bukan "len()", yang merupakan panggilan ke fungsi, yang tidak kita inginkanhelp(sys)
— string bantuan untuk modulsys
(harus melakukanimport sys
terlebih dahulu)dir(sys)
—dir()
sepertihelp()
, tetapi hanya memberikan daftar singkat simbol atau "atribut" yang ditentukanhelp(sys.exit)
— string bantuan untuk fungsiexit()
dalam modulsys
help('xyz'.split)
— string bantuan untuk metodesplit()
untuk objek string. Anda dapat memanggilhelp()
dengan objek itu sendiri atau contoh objek tersebut, ditambah atributnya. Misalnya, memanggilhelp('xyz'.split)
sama dengan memanggilhelp(str.split)
.help(list)
— string bantuan untuk objeklist
dir(list)
— menampilkan atribut objeklist
, termasuk metodenyahelp(list.append)
— string bantuan untuk metodeappend()
untuk objeklist