Pengantar Python

Awal

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 mencakup 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, cobalah video yang tercantum di akhir postingan ini — masing-masing konten pembelajaran fitur serta penafsir interaktif Python yang dapat Anda gunakan untuk berlatih. Apa "penerjemah" yang kami sebutkan ini? Anda akan mengetahuinya di bagian berikutnya.

Pengenalan Bahasa

Python adalah bahasa dinamis yang ditafsirkan (dikompilasi bytecode). Tidak ada deklarasi jenis variabel, parameter, fungsi, atau metode dalam kode sumber. Hal ini membuat kode menjadi pendek serta fleksibel, dan Anda akan kehilangan pemeriksaan jenis waktu kompilasi pada 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 penafsir Python dan mengetikkan kode langsung ke dalamnya. Jika Anda memiliki pertanyaan seperti, "Apa yang terjadi jika saya menambahkan int ke list?" Hanya dengan mengetiknya ke penafsir Python adalah cara cepat dan mungkin cara 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 python dicetak setelah Anda mengetik python dan sebelum prompt >>> memberi tahu Anda tentang versi python yang Anda gunakan dan tempat pembuatannya. Selama hal pertama yang dicetak adalah "Python 3.", contoh-contoh tersebut akan cocok untuk Anda.

Seperti yang dapat Anda lihat di atas, mudah untuk bereksperimen dengan variabel dan operator. Selain itu, penafsir melempar, atau "memunculkan" dalam bahasa 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" merupakan variabel yang berbeda. Akhir dari sebuah baris menandai akhir pernyataan, sehingga tidak seperti C++ dan Java, Python tidak memerlukan titik koma di akhir setiap pernyataan. Komentar dimulai dengan '#' dan meluas ke 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, dan 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 tanda kurung kurawal — selengkapnya akan dibahas 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 berikut:

$ 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 pertama kali diimpor di suatu tempat, dengan menyiapkan variabel dan fungsinya. Modul Python dapat dijalankan langsung — seperti di atas python3 hello.py Bob — atau dapat diimpor dan digunakan oleh beberapa modul lain. Saat file Python dijalankan langsung, variabel khusus "__name__" ditetapkan ke "__main__". Oleh karena itu, biasanya if __name__ ==... boilerplate yang ditampilkan di atas 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] argumen pertama, dan seterusnya. Jika mengetahui tentang 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 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-baris yang membentuk fungsi atau pernyataan if dikelompokkan berdasarkan tingkat indentasi yang sama. Kami juga menyajikan 2 cara berbeda untuk mengulangi string, menggunakan operator + yang lebih mudah digunakan, tetapi * juga berfungsi karena operator "repeat" Python, yang berarti '-' * 10 memberikan '----------', cara yang rapi untuk membuat "line" di layar. Dalam komentar kode, kita mengisyaratkan bahwa * berfungsi lebih cepat daripada +, alasannya adalah * menghitung ukuran objek yang dihasilkan satu kali, sedangkan dengan +, penghitungan dilakukan setiap kali + dipanggil. + dan * disebut operator "overload" karena keduanya 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 fungsi. Docstring dapat berupa baris tunggal atau deskripsi multibaris seperti dalam contoh di atas. (Ya, itu adalah "tiga tanda kutip", sebuah fitur unik untuk Python.) Variabel yang ditentukan dalam fungsi bersifat lokal untuk fungsi tersebut, sehingga "hasil" dalam fungsi di atas terpisah dari variabel "hasil" di fungsi lain. Pernyataan return dapat mengambil argumen, yang dalam hal ini merupakan nilai yang ditampilkan ke pemanggil.

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

def main():
    print(repeat('Yay', False))      ## YayYayYay
    print(repeat('Woo Hoo', True))   ## Woo HooWoo HooWoo Hoo!!!

Pada 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 suatu kode memengaruhi maknanya. Blok pernyataan logis seperti pernyataan yang membentuk fungsi semuanya 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, baris tersebut akan ditandai sebagai error sintaksis.

Penggunaan spasi kosong di Python pada awalnya terasa sedikit aneh, tetapi ini logis dan saya sadar bahwa saya sudah terbiasa dengannya dengan sangat cepat. Hindari penggunaan TAB karena akan sangat mempersulit skema indentasi (belum lagi TAB dapat memiliki arti yang berbeda pada platform yang berbeda). Setel editor untuk menyisipkan spasi, bukan TAB untuk kode Python.

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

Kode Diperiksa saat Runtime

Python melakukan sangat sedikit 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 lucu di Python ... kode ini dikompilasi dan berjalan dengan baik asalkan nama saat runtime bukan 'Guido'. Hanya ketika run benar-benar mencoba mengeksekusi repeeeet(), ia akan melihat bahwa tidak ada fungsi tersebut dan menimbulkan error. Ada juga error kedua dalam cuplikan ini. nama tidak diberi nilai sebelum dibandingkan dengan 'Guido'. Python akan memunculkan 'NameError' jika Anda mencoba mengevaluasi variabel yang belum ditetapkan. Ini adalah beberapa contoh yang menunjukkan bahwa ketika Anda pertama kali menjalankan program Python, beberapa kesalahan pertama yang Anda lihat adalah kesalahan ketik sederhana atau variabel yang tidak diinisialisasi seperti ini. Ini adalah salah satu area di mana bahasa dengan sistem jenis yang lebih panjang, seperti Java, memiliki keuntungan ... mereka dapat menangkap error tersebut pada waktu kompilasi (tetapi tentu saja Anda harus mengelola semua informasi jenis tersebut ... ini adalah konsekuensinya).

Python 3 memperkenalkan petunjuk jenis. Petunjuk jenis memungkinkan Anda menunjukkan jenis untuk setiap argumen dalam suatu fungsi serta mengetahui jenis objek yang ditampilkan oleh fungsi. Misalnya, dalam fungsi def is_positive(n: int) -> bool: yang dianotasi, argumen n adalah int dan nilai yang ditampilkan adalah bool. Kita akan membahas arti jenis-jenis ini nanti. Namun demikian, petunjuk jenis sepenuhnya 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. 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 mendengar tentang atau melihatnya secara umum.

Nama Variabel

Karena variabel Python tidak memiliki jenis yang dieja dalam kode sumber, akan sangat membantu jika Anda memberikan nama yang bermakna pada variabel untuk mengingatkan diri Anda tentang apa yang terjadi. Jadi, gunakan "nama" jika berupa nama tunggal, dan "nama" jika berupa daftar nama, dan "tupel" jika berupa daftar tupel. Banyak error Python dasar yang disebabkan karena lupa jenis nilai yang ada di setiap variabel. Jadi, gunakan nama variabel (yang Anda miliki) agar semuanya tetap teratur.

Sejauh penamaan yang sebenarnya, beberapa bahasa lebih memilih underscored_parts untuk nama variabel yang terdiri dari "lebih dari satu kata," tetapi bahasa lain lebih menyukai camelCasing. Secara umum, Python lebih menyukai metode garis bawah tetapi memandu developer untuk beralih ke camelCasing jika berintegrasi ke kode Python yang sudah ada dan sudah menggunakan gaya tersebut. Keterbacaan diperhitungkan. Baca selengkapnya di bagian tentang konvensi penamaan di PEP 8.

Seperti yang bisa Anda duga, kata kunci seperti 'if' dan 'when' 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 perlu mengganti variabel sistem tersebut. Bawaan bukanlah kata kunci, sehingga rentan digunakan secara tidak sengaja oleh developer Python baru.

Lebih lanjut 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 menamai fungsi dan variabelnya 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" sendiri, yang seperti yang bisa Anda duga adalah binding nama ke objek variabel.

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 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 tersebut membuat argv dan exit() tersedia berdasarkan nama pendeknya; namun, kami merekomendasikan bentuk asli dengan nama yang sepenuhnya memenuhi syarat karena jauh lebih mudah untuk menentukan asal fungsi atau atribut.

Ada banyak modul dan paket yang dibundel dengan instalasi standar penafsir Python, jadi Anda tidak perlu melakukan apa pun 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 Library Standar di http://docs.python.org/library.

Bantuan online, help(), dan dir()

Ada berbagai cara untuk mendapatkan bantuan terkait Python.

  • Lakukan penelusuran di Google, diawali dengan kata "python", seperti "python list" atau "python string huruf kecil". Klik pertama sering kali merupakan jawabannya. Teknik ini tampaknya bekerja lebih baik untuk Python daripada untuk bahasa lain karena alasan tertentu.
  • Situs dokumen Python resmi — docs.python.org — memiliki dokumen berkualitas tinggi. Meskipun demikian, saya sering kali mencari beberapa kata di Google penelusuran agar lebih cepat.
  • Ada juga milis Tutor resmi yang dirancang khusus bagi 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 penafsir Python, fungsi help() menarik string dokumentasi untuk beragam modul, fungsi, dan metode. String dokumen ini mirip dengan javadoc Java. Fungsi dir() memberi tahu Anda apa itu atribut dari suatu objek. Di bawah ini adalah beberapa cara untuk memanggil help() dan dir() dari penafsir:

  • help(len) — string bantuan untuk fungsi len() bawaan; perhatikan bahwa string tersebut 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() seperti help() tetapi hanya memberikan daftar singkat dari simbol yang ditentukan, atau "atribut"
  • help(sys.exit) — string bantuan untuk fungsi exit() di modul sys
  • help('xyz'.split) — string bantuan untuk metode split() bagi objek string. Anda dapat memanggil help() dengan objek itu sendiri atau contoh objek tersebut, serta 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