Pengantar Python

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 akhir postingan ini — setiap fitur berisi konten pembelajaran serta penafsir interaktif Python yang dapat Anda gunakan untuk berlatih. Apa yang dimaksud dengan "penafsir" yang kita sebutkan? Anda akan mengetahuinya di bagian berikutnya.

Pengantar Bahasa

Python adalah bahasa yang dinamis (dikompilasi bytecode). Tidak ada deklarasi jenis variabel, parameter, fungsi, atau metode dalam kode sumber. Hal ini membuat kode menjadi singkat dan fleksibel, dan Anda kehilangan pemeriksaan jenis waktu kompilasi kode sumber. Python melacak jenis semua nilai saat runtime dan menandai kode yang tidak masuk akal saat berjalan.

Cara terbaik untuk melihat cara kerja kode Python adalah dengan menjalankan penafsir Python dan mengetik kode langsung ke dalamnya. Jika Anda pernah memiliki pertanyaan seperti, "Apa yang terjadi jika saya menambahkan int ke list?" Cukup mengetikkannya ke dalam penafsir Python adalah cara tercepat dan mungkin terbaik untuk melihat apa yang terjadi. (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, in 
TypeError: 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, in 
NameError: 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 dibuat. Selama hal pertama yang dicetak adalah "Python 3.", contoh ini seharusnya berhasil untuk Anda.

Seperti yang dapat Anda lihat di atas, mudah untuk bereksperimen dengan variabel dan operator. Selain itu, penafsir akan menampilkan, atau "memunculkan" 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 penafsir Python untuk mengeksekusi kode di hello.py, dengan meneruskan argumen command line "Alice". Lihat halaman dokumen resmi tentang berbagai opsi yang Anda miliki saat menjalankan Python dari command line.

Berikut adalah program hello.py yang sangat sederhana (perhatikan bahwa blok kode dibatasi secara ketat menggunakan indentasi, bukan kurung kurawal — lebih lanjut tentang hal ini 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 ini:

$ 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 dijalankan dari atas ke bawah saat pertama kali modul diimpor di suatu tempat, menyiapkan variabel dan fungsinya. Modul Python dapat dijalankan secara langsung — seperti di atas python3 hello.py Bob — atau dapat diimpor dan digunakan oleh beberapa modul lain. Saat file Python dijalankan secara langsung, variabel khusus "__name__" ditetapkan ke "__main__". Oleh karena itu, biasanya if __name__ ==... boilerplate yang ditampilkan di atas digunakan untuk memanggil fungsi main() saat modul dijalankan secara langsung, tetapi tidak saat modul diimpor oleh beberapa modul lain.

Dalam program Python standar, daftar sys.argv berisi argumen command line dengan cara standar dengan sys.argv[0] sebagai program itu sendiri, sys.argv[1] sebagai argumen pertama, dan seterusnya. Jika Anda mengetahui argc, atau jumlah argumen, Anda cukup meminta nilai ini dari Python dengan len(sys.argv), seperti yang kita lakukan dalam kode penafsir interaktif di atas saat meminta panjang string. Secara umum, len() dapat memberi tahu Anda berapa panjang string, jumlah elemen dalam daftar dan tuple (struktur data seperti array lainnya), dan jumlah key-value pair dalam kamus.

Fungsi yang Ditentukan Pengguna (UDF)

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 semua baris memiliki tingkat indentasi yang sama. Kami juga menyajikan 2 cara berbeda untuk mengulangi string, menggunakan operator + yang lebih mudah digunakan, tetapi * juga berfungsi karena merupakan operator "repeat" Python, yang berarti '-' * 10 memberikan '----------', cara yang rapi untuk membuat "baris" di layar. Dalam komentar kode, kita mengisyaratkan bahwa * berfungsi lebih cepat daripada +, alasannya adalah * menghitung ukuran objek yang dihasilkan satu kali, sedangkan dengan +, penghitungan tersebut dilakukan setiap kali + dipanggil. + dan * disebut operator "overload" karena memiliki arti yang berbeda untuk angka vs. string (dan jenis data lainnya).

Kata kunci def menentukan fungsi dengan parameternya dalam tanda kurung dan kodenya diindentasi. Baris pertama fungsi dapat berupa string dokumentasi ("docstring") yang menjelaskan fungsi yang dilakukan. Docstring dapat berupa baris tunggal, atau deskripsi multibaris 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 menggunakan argumen, yang dalam hal ini adalah nilai yang ditampilkan ke pemanggil.

Berikut adalah kode yang memanggil fungsi repeat() di atas, yang mencetak apa yang ditampilkannya:

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() ditentukan di bagian bawah file dengan fungsi yang dipanggil di atasnya.

Indentasi

Salah satu fitur Python yang tidak biasa adalah indentasi spasi kosong dari potongan kode memengaruhi maknanya. Blok pernyataan logis seperti yang membentuk fungsi harus memiliki indentasi yang sama, yang ditetapkan dari indentasi fungsi induknya atau "if" atau apa pun. Jika salah satu baris dalam grup memiliki indentasi yang berbeda, hal ini ditandai sebagai error sintaksis.

Penggunaan spasi kosong Python terasa sedikit aneh pada awalnya, tetapi logis dan saya merasa cepat terbiasa. Hindari menggunakan TAB karena sangat merumitkan skema indentasi (belum lagi TAB dapat memiliki arti yang berbeda di platform yang berbeda). Setel editor Anda untuk menyisipkan spasi, bukan TAB, untuk kode Python.

Pertanyaan umum yang diajukan oleh pemula adalah, "Berapa banyak spasi yang harus saya indentasi?" Menurut panduan gaya Python resmi (PEP 8), Anda harus membuat indentasi dengan 4 spasi. (Fakta menyenangkan: Pedoman gaya internal Google menentukan indentasi 2 spasi!)

Kode yang Diperiksa saat Runtime

Python melakukan sangat sedikit pemeriksaan pada waktu kompilasi, menunda hampir semua pemeriksaan tipe, nama, dll. di 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() tidak sengaja diketik sebagai repeeeet(). Lucunya di Python ... kode ini dikompilasi dan berjalan dengan baik asalkan nama saat runtime bukan 'Guido'. Hanya saat run benar-benar mencoba mengeksekusi repeeeet(), run akan melihat bahwa tidak ada fungsi tersebut dan menampilkan error. Ada juga error kedua dalam cuplikan ini. name tidak diberi nilai sebelum dibandingkan dengan 'Guido'. Python akan menampilkan 'NameError' jika Anda mencoba mengevaluasi variabel yang tidak ditetapkan. Berikut adalah beberapa contoh yang menunjukkan bahwa saat pertama kali menjalankan program Python, beberapa error pertama yang Anda lihat akan berupa kesalahan ketik sederhana atau variabel yang tidak diinisialisasi seperti ini. Ini adalah salah satu area yang memiliki keunggulan bahasa dengan sistem jenis yang lebih panjang, seperti Java ... bahasa tersebut dapat menangkap error tersebut pada waktu kompilasi (tetapi tentu saja Anda harus mempertahankan semua informasi jenis tersebut ... ini adalah kompromi).

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 tipe-tipe ini nanti. Namun, petunjuk jenis sepenuhnya bersifat opsional. Anda akan melihat lebih 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. Alat ini 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 pernah mendengarnya atau melihatnya di luar sana.

Nama Variabel

Karena variabel Python tidak memiliki jenis yang disebutkan dalam kode sumber, sebaiknya beri nama yang bermakna pada variabel Anda untuk mengingatkan diri Anda tentang apa yang terjadi. Jadi, gunakan "name" jika berupa satu nama, dan "names" jika berupa daftar nama, dan "tuples" jika berupa daftar tuple. Banyak error Python dasar yang disebabkan karena lupa jenis nilai yang ada di setiap variabel, jadi gunakan nama variabel (semua yang Anda miliki) untuk membantu menjaga semuanya tetap lurus.

Sejauh pemberian nama 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 camelCasing jika berintegrasi ke kode Python yang sudah ada dan sudah menggunakan gaya tersebut. Jumlah keterbacaan. 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 agar 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 yang sepenuhnya memenuhi syarat dari fungsi foo tersebut adalah "binky.foo". Dengan cara ini, berbagai modul Python dapat memberi nama fungsi dan variabel sesuai keinginan, dan nama variabel tidak akan bertentangan — module1.foo berbeda dengan module2.foo. Dalam kosakata Python, kita akan mengatakan bahwa binky, module1, dan module2 masing-masing memiliki "namespace"-nya 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 dapat mengakses definisi dalam modul sys dan menyediakannya dengan 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 dengan nama singkatnya; namun, sebaiknya gunakan formulir asli dengan nama yang sepenuhnya memenuhi syarat karena jauh lebih mudah untuk menentukan asal fungsi atau atribut.

Ada banyak modul dan paket yang dipaketkan dengan penginstalan standar penafsir Python, sehingga Anda tidak perlu melakukan tindakan tambahan untuk menggunakannya. Secara kolektif, library ini dikenal sebagai "Library Standar Python". 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 Library Standar di http://docs.python.org/library.

Bantuan online, help(), dan dir()

Ada berbagai cara untuk mendapatkan bantuan terkait Python.

  • Lakukan penelusuran Google, yang dimulai dengan kata "python", seperti "daftar python" atau "string python huruf kecil". Klik pertama sering kali menjadi jawabannya. Teknik ini tampaknya berfungsi lebih baik untuk Python daripada untuk bahasa lain karena alasan tertentu.
  • Situs dokumen resmi Python — docs.python.org — memiliki dokumen berkualitas tinggi. Meskipun demikian, saya sering kali menemukan bahwa penelusuran Google dengan beberapa kata lebih cepat.
  • Ada juga milis resmi Tutor yang dirancang khusus untuk pengguna 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 penafsir Python, fungsi help() akan menampilkan string dokumentasi untuk berbagai modul, fungsi, dan metode. String dokumen ini mirip dengan javadoc Java. Fungsi {i>dir()<i} memberi tahu Anda apa atribut-atribut objek. Berikut beberapa cara untuk memanggil help() dan dir() dari penafsir:

  • help(len) — string bantuan untuk fungsi len() bawaan; perhatikan bahwa ini adalah "len", bukan "len()", yang merupakan panggilan ke fungsi, yang tidak kita inginkan
  • help(sys) — string bantuan untuk modul sys (harus melakukan import sys terlebih dahulu)
  • dir(sys)dir() mirip dengan help(), tetapi hanya memberikan daftar singkat simbol yang ditentukan, atau "atribut"
  • help(sys.exit) — string bantuan untuk fungsi exit() di modul sys
  • help('xyz'.split) — string bantuan untuk metode split() untuk objek string. Anda dapat memanggil help() dengan objek itu sendiri atau contoh objek tersebut, beserta atributnya. Misalnya, memanggil help('xyz'.split) sama dengan memanggil help(str.split).
  • help(list) — string bantuan untuk objek list
  • dir(list) — menampilkan atribut objek list, termasuk metodenya
  • help(list.append) — string bantuan untuk metode append() untuk objek list