Cara Menulis Sintaks Python Lengkap

Style Guide pada Kode Python

Berikut adalah beberapa panduan gaya untuk menulis kode Python dengan baik dan benar. Panduan gaya penulisan kode ini mengacu pada PEP-008. Beberapa proyek mungkin memiliki panduan gayanya sendiri.

Beberapa contoh kode yang ditulis pada halaman ini berbentuk pseudocode, dimaksudkan untuk memberikan gambaran tentang panduan gaya kode saja.

Guido, pencipta bahasa Python, merasa bahwa kode lebih sering dibaca daripada ditulis. Untuk alasan ini, panduan ini sangat menekankan pada kode yang mudah dibaca dan membuatnya konsisten di (hampir) setiap proyek Python yang ada.

Namun, dalam kasus tertentu, keputusan untuk memodifikasi tetap berada pada pembuat kode. Mungkin sebuah kode dapat dibaca dengan lebih jelas meskipun tidak mengikuti satu atau beberapa pedoman dalam artikel ini.

Indentasi

Gunakan 4 spasi pada setiap tingkat indentasi.

Python sendiri menggunakan indentasi untuk menulis kode bertingkat. Mungkin bahasa lain menggunakan pernyataan tertentu (Begin, end – pascal), perbedaan baris serta kurung kurawal.

Pernyataan yang memiliki indentasi yang sama dan ditempatkan secara berurutan dikenali sebagai pernyataan blok oleh Python dan akan dieksekusi secara berurutan.

Statement tingkat 1:
Statement tingkat 2()
Statement tingkat 2 yang kedua()

Baris Lanjutan

Seringkali saat menulis kode, kita harus menggunakan baris lanjutan karena kode tidak cukup untuk ditulis dalam satu baris. Secara umum, kita dapat menggunakan tanda hubung, tanda kurung, kurung kurawal, atau seperti yang disarankan dalam PEP-008, gunakan hanging indent.

Beberapa panduan penggunaan hanging indent dalam penulisan kode Python adalah sebagai berikut:

Disarankan:

# Opsi 1

# Rata kiri dengan kurung atau pemisah dengan argumen utama

foo = long_function_name(var_one, var_two,

                         var_three, var_four)

 

# Opsi 2

# Tambahkan indentasi ekstra - (level indentasi baru) untuk memisahkan parameter/argument dari bagian lainnya

def long_function_name(

        var_one, var_two, var_three,

        var_four):

    print(var_one)

 

# Opsi 3

# Hanging indents dengan penambahan level indentasi saja

foo = long_function_name(

    var_one, var_two,

    var_three, var_four)

Tidak Disarankan:

# Contoh kesalahan 1

# Tidak rata kiri dengan bagian yang relevan

foo = long_function_name(var_one, var_two,

    var_three, var_four)

 

# Contoh kesalahan 2

# Sulit dibedakan antara baris lanjutan atau fungsi baru

def long_function_name(

    var_one, var_two, var_three,

    var_four):

    print(var_one)

Catatan: 4 spasi bersifat opsional pada baris lanjutan, utamakan keterbacaan kode.

Kamu juga dapat menggunakan jumlah spasi lain (misalnya 2) untuk baris lanjutan ini. Contohnya seperti ini:

# Hanging indents *boleh* menggunakan selain 4 spasi

foo = long_function_name(

  var_one, var_two,

  var_three, var_four)

Kondisional (If)

Bagian ini hanya memberikan gambaran standar penulisan, pembahasan kondisional ada di artikel percabangan.

Saat menulis pernyataan bersyarat, misalnya IF, kita juga menemukan bahwa menulis terkadang tidak cukup untuk menulis dalam satu baris, atau bahkan menggunakan beberapa operand yang akan sulit apabila digabungkan dalam satu baris. Dalam kondisi tersebut, Python tidak memberikan panduan khusus, mengingat kondisi yang dihadapi programmer bisa saja berbeda. Contoh yang disarankan adalah sebagai berikut (walaupun versi lain dimungkinkan selama keterbacaan kode tetap tinggi):

# Contoh kondisi visual yang tidak diubah/tanpa indentasi

if (sebuah kondisi dan

    kondisi yang lain):

    lakukanSesuatu()

 

# Tambahkan komentar

if (sebuah kondisi dan

    kondisi yang lain):

    #Mengingat Keduanya Benar, lakukan hal berikut

    lakukanSesuatu()

 

# Tambahkan ekstra indentasi pada baris lanjutan

if (sebuah kondisi dan

        kondisi yang lain):

    lakukanSesuatu()

Kurung/Siku Penutup

Penempatan tanda kurung atau siku penutup juga dapat diletakkan pada baris berikutnya, mengikuti posisi karakter pertama yang bukan whitespace (non-whitespace character) pada baris sebelumnya:

my_list = [

    1, 2, 3,

    4, 5, 6,

    ]

 

result = some_function_that_takes_arguments(

    'a', 'b', 'c',

    'd', 'e', 'f',

    )

Atau dapat ditempatkan sejajar dengan pernyataan utama, misalnya:

my_list = [

    1, 2, 3,

    4, 5, 6,

]

 

result = some_function_that_takes_arguments(

    'a', 'b', 'c',

    'd', 'e', 'f',

)

Tab atau Spasi

Spasi adalah model yang direkomendasikan PEP-008. Pengecualian untuk kode yang sudah menggunakan tab/tabulasi sebelumnya. Python sejak versi 3 tidak mengizinkan pencampuran antara Tab dan Spasi untuk indentasi. Kamu disarankan untuk mengonversi kode agar menggunakan spasi sepenuhnya. Kamu dapat menggunakan find-replace untuk mengganti tab, atau memanggil kode berbasis Python 2 kamu dengan opsi -t (warning) atau -tt (error) untuk mencari tahu di mana tab dan spasi tercampur.

Panjang Baris Maksimum

Batasi panjang kode per baris hingga 79 karakter. Untuk komentar atau dokumentasi, usahakan jangan melebihi 72 karakter.

Dengan membatasi panjang baris maksimum, kamu akan memudahkan pengguna lain untuk membuka >1 jendela editor secara berdampingan, misalnya untuk melakukan review atau perbandingan.

Panjang kode per baris yang terbatas memudahkan kamu menggunakan code review tools yang menampilkan dua versi berbeda secara berdampingan.

Mengapa 79? Ini dicontohkan dalam editor dengan lebar jendela diatur ke 80 karakter.

1 karakter yang tersisa dapat berupa marker glyph atau whitespace. Batasan 79 karakter ini berarti bahwa editor terkecil sekalipun tidak akan merusak struktur dan keterbacaan kode kamu. Jika kamu atau tim kamu mengalami kesulitan (misalnya karena struktur penamaan variabel) yang telah kamu sepakati cenderung melebihi batas panjang karakter, kamu dapat melakukan konvensi atau kesepakatan yang berlaku untuk kode kamu sendiri.

Umumnya hingga 99 karakter per baris.

Catatan: Python Standard Library selalu dikembangkan secara konservatif dan mempertahankan default 79 karakter dalam kode, dan 72 dalam komentar/dokumentasi.

Seperti yang telah dibahas sebelumnya, kamu disarankan untuk menggunakan baris lanjutan dengan kurung, kurawal, siku, maupun hanging indents.

Baris panjang dapat dibagi menjadi beberapa baris. Beberapa dari kamu mungkin akrab dengan pemisahan menggunakan backslash (\), tetapi tidak disarankan untuk menggunakannya, kecuali benar-benar diperlukan. Contohnya adalah dalam penggunaan backslash pada statement with atau assert yang tidak bisa menggunakan implicit continuation.

with open('/path/to/some/file/you/want/to/read') as file_1, \

     open('/path/to/some/file/being/written', 'w') as file_2:

    file_2.write(file_1.read())

Pastikan untuk memberikan indentasi yang sesuai pada baris.

Mengganti Baris: sebelum atau sesudah operator binary?

Bagian ini hanya memberikan gambaran tentang standar penulisan, pembahasan tentang kondisional dibahas dalam artikel Operator, Operands, dan Expressions. Mengganti baris setelah operator biner pernah menjadi rekomendasi. Namun, ternyata menggunakan cara ini membuat mata cepat lelah dan perlu dilakukan cross check pada baris yang berbeda. Sebagai contoh: 

income = (gross_wages +

          taxable_interest +

          (dividends - qualified_dividends) -

          ira_deduction -

          student_loan_interest)

Untuk mengatasi masalah ini, pendekatan baris baru dipilih sebelum operator biner. Ini untuk memudahkan pembaca kode memahami operasi yang dilakukan pada variabel berikutnya.

income = (gross_wages

          + taxable_interest

          + (dividends - qualified_dividends)

          - ira_deduction

          - student_loan_interest)

Kedua pendekatan ini dimungkinkan dengan Python. Disarankan agar kamu menggunakan pendekatan kedua (baris baru sebelum operator) untuk menulis kode baru.

Baris Kosong

Disarankan agar kamu menambahkan dua baris kosong pada top level function dan class definitions. Kemudian untuk setiap deklarasi method, dipisahkan dengan satu baris kosong.

Kamu juga dapat menambahkan baris kosong ini bila diperlukan, misalnya untuk memisahkan kombinasi beberapa fungsi yang memiliki fungsi terkait atau untuk meningkatkan keterbacaan kode. Pemisahan baris kosong tidak diperlukan jika deklarasi fungsi/metode kamu adalah one-liner, umumnya untuk fungsi/metode yang belum sepenuhnya diterapkan.

File Encoding

Kode dalam inti Python, selalu menggunakan encoding UTF-8 (Python 3) atau ASCII (Python 2). Pada kasus ini, apabila dalam sebuah berkas tidak ditulis deklarasi encoding, maka berkas tersebut menggunakan encoding ASCII (Python 2) atau UTF-8 (Python 3). Dalam standard library, non-default encoding hanya digunakan untuk pengujian atau memberikan sebuah komentar/dokumentasi, misalnya nama penulis tidak menggunakan karakter ASCII.

Untuk Python 3 dan seterusnya, pada standard library hanya menggunakan karakter ASCII dan sebisa mungkin menggunakan kata-kata dalam Bahasa Inggris. Proyek yang menggunakan Python 3 didorong untuk menggunakan standar yang sama. Lihat PEP 3131.

Import

Saat mengimpor library, impor setiap library pada baris yang berbeda.

Yes: import os

     import sys

 

No:  import sys, os

Kecuali, jika kamu membutuhkan lebih dari satu sub-library dari library yang sama.

from subprocess import Popen, PIPE

Impor umumnya ditempatkan di awal file. Setelah komentar dan dokumentasi tentang file (misalnya definisi kelas, dll.), sebelum variabel global dan konstanta. Jika memungkinkan, kelompokkan impor dalam urutan berikut:

  • Standard Library
  • Library Pihak Ketiga
  • Local/Library spesifik

Setiap grup sebaiknya dipisahkan dengan baris kosong.

Dalam Python 2 dikenal dengan istilah relative import eksplisit, yaitu proses import yang menggunakan jalur relative yang digunakan. Di Python 3, semua impor adalah mutlak (bersama dengan semua jalur secara penuh).

import mypkg.sibling

from mypkg import sibling

from mypkg.sibling import example

Kode pada Standard library sendiri umumnya dapat menggunakan absolute import. Kamu juga dapat mengimpor kelas/sub-library, tentu saja kamu dapat menggunakan pemanggilan berikut ini:

from myclass import MyClass

from foo.bar.yourclass import YourClass

Jika ada nama kelas yang sama, gunakan pemanggilan secara eksplisit:

import myclass

import foo.bar.yourclass

Saat memanggil, gunakanlah “myclass.MyClass” dan “foo.bar.yourclass.YourClass”.

from  import *

Wildcard imports seperti tertulis, sedapat mungkin dihindari untuk mengatasi ambiguitas dan ketidaktahuan tentang modul apa yang di-import.

Tanda Petik

Petik tunggal (‘) dan petik ganda (“) dianggap sama oleh Python, dan tidak memiliki preferensi khusus untuk penggunaannya. Hal ini dikarenakan ada kemungkinan string yang memuat salah satunya. Kamu disarankan untuk menggunakan salah satunya secara konsisten.

Docstring (dokumentasi kode/fungsi/method) pada Python didefinisikan dengan tiga tanda petik, disarankan tanda petik ganda (”””) pada awal dan akhir statement docstring.

Whitespace pada Expressions dan Statements

Wajib dihindari: penambahan whitespace yang tidak perlu

Antara kurung, kurawal, kurung siku

Yes: spam(ham[1], {eggs: 2})

No:  spam( ham[ 1 ], { eggs: 2 } )

Setelah koma, tanpa argumen lain setelahnya

Yes: foo = (0,)

No:  bar = (0, )

Sebelum koma, titik dua, atau titik koma

Yes: if x == 4: print x, y; x, y = y, x

No:  if x == 4 : print x , y ; x , y = y , x

Namun, jika kamu menggunakan titik dua/colon sebagai slice (sub-list), pastikan ia memiliki spasi/whitespace yang sama pada kedua sisinya.

Yes:

ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]

ham[lower:upper], ham[lower:upper:], ham[lower::step]

ham[lower+offset : upper+offset]

ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]

ham[lower + offset : upper + offset]

 

No:

ham[lower + offset:upper + offset]

ham[1: 9], ham[1 :9], ham[1:9 :3]

ham[lower : : upper]

ham[ : upper]

Saat memberikan parameter pada fungsi, sebelum kurung tidak boleh ada spasi

Yes: spam(1)

No:  spam (1)

Saat memberikan parameter/index pada list, sebelum kurung siku tidak boleh ada spasi

Yes: dct['key'] = lst[index]

No:  dct ['key'] = lst [index]
Saat membuat assignment pada variabel, sebaiknya tidak menambahkan whitespace yang tidak perlu

Yes:

x = 1

y = 2

long_variable = 3

 

No:

x             = 1

y             = 2

long_variable = 3

Rekomendasi Lainnya

Hindari menambahkan whitespace di belakang statement apapun, utamanya di statement akhir dalam sebuah baris, karena whitespace tersebut tidak mudah dilihat.

Biasakan untuk menambahkan satu spasi baik di kiri maupun kanan untuk operasi berikut:

  • Assignment (=)
  • Augmented assignment (+=, -=etc.)
  • Comparisons (==, , !=, , =, in, not in, is, is not)
  • Booleans (and, or, not)

Jika operator dengan berbagai tingkatan prioritas digunakan, letakkan whitespace pada operator-operator dengan prioritas terendah. Namun kamu juga dapat menyesuaikannya sendiri.

Catatan: jangan pernah menggunakan >1 spasi dan gunakan spasi yang sama baik di sebelah kiri maupun kanan dari operator-operator binary kamu.

Yes:

i = i + 1

submitted += 1

x = x*2 - 1

hypot2 = x*x + y*y

c = (a+b) * (a-b)

 

No:

i=i+1

submitted +=1

x = x * 2 - 1

hypot2 = x * x + y * y

c = (a + b) * (a - b)

Komentar

Dalam sebuah kode Python, kamu diajak untuk memastikan kode kamu terbaca oleh programmer lain. Salah satu caranya adalah dengan menggunakan fitur komentar untuk memberitahu fungsi atau informasi lain terkait kode kamu. Pastikan komentar kamu ter-update dan tidak mengalami kontradiksi dengan kode yang ada.

Umumnya, komentar dituliskan dalam kalimat utuh dengan memperhatikan penulisan (huruf besar di awal kalimat, huruf kecil saat diawali dengan identifier atau variabel, dan diakhiri titik di akhir kalimat). Kamu juga bisa menggabungkan beberapa kalimat menjadi blok komentar dengan menambah dua spasi saat berganti kalimat dalam satu paragraf, kecuali pada kalimat terakhir. Jika memungkinkan, tuliskan komentar dalam bahasa Inggris, kecuali kamu yakin bahwa pembaca komentar ini dipastikan mengerti bahasa kamu.

Blok Komentar

Blok komentar umumnya digunakan untuk menjelaskan fungsi utuh atau sub-fungsi yang mengikuti/berada di bawahnya. Blok komentar diindentasi setara dengan kode yang dijelaskan. Setiap barisnya diawali dengan # dan sebuah spasi serta setiap paragrafnya dimulai pada baris baru.

Komentar Inline

Komentar Inline pada Python umumnya diletakkan pada baris yang sama dengan kode. Umumnya dipisahkan dan dirapikan dengan jarak dua spasi dari kode yang dimaksud, diawali # dan sebuah spasi.

Komentar inline dapat juga digunakan di atas baris yang ingin diberikan komentar, agar tidak mengurangi jumlah karakter yang dapat dituliskan dalam sebuah baris. Untuk semua jenis komentar, jangan menuliskan komentar untuk hal yang sudah langsung dapat dibaca dari kodenya, seperti contoh berikut:

Tidak disarankan:

x = x + 1                 # Tambahkan x

Disarankan (kontekstual):

x = x + 1                 # Mengakomodasi layar ukuran Z

Dokumentasi

Guideline untuk menuliskan dokumentasi (docstring) yang baik tersedia di PEP 257. Kuncinya:

  • Buatlah dokumentasi untuk semua modul, fungsi, kelas, dan method yang bersifat public atau akan diakses publik.
  • Docstring tidak diwajibkan pada method yang tidak bersifat public, namun kamu disarankan menambahkan komentar tentang Apa saja yang dilakukan fungsi/modul ini beserta informasi lainnya yang mungkin diperlukan. Komentar ini diletakkan setelah baris def.

PEP 257 memberikan panduan detil yang dapat digunakan. Seperti yang sudah-sudah, kamu disarankan untuk menutup sebuah docstring yang lebih dari satu baris, pada baris baru berikutnya:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

Untuk dokumen baris tunggal, kamu disarankan untuk menempatkan akhiran “”” pada baris yang sama.

Meskipun secara sintaksis kamu bisa menggantikan 3-tanda-kutip-dua “”” dengan 3-tanda-kutip-satu ”’, untuk penulisan komentar multi-baris, tetapi PEP 257 memberikan panduan gunakan 3-tanda-kutip-dua untuk dokumentasi (docstring)

Next Post Previous Post
No Comment
Add Comment
comment url