Lewati ke konten utama

Tutorial PEP-8: Standar Kode di Python

Dengan tutorial pemula ini, Anda akan mulai menjelajahi PEP-8, panduan gaya Python, sehingga Anda dapat mulai memformat kode dengan benar untuk memaksimalkan keterbacaannya!
Diperbarui 28 Sep 2026  · 15 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

PEP-8 atau Python Enhancement Proposal menyajikan beberapa poin kunci yang dapat Anda gunakan untuk membuat kode lebih teratur dan mudah dibaca. Seperti yang dikatakan pembuat Python, Guido Van Rossum:

Kode lebih sering dibaca daripada ditulis.

Dalam tulisan ini, Anda akan mulai menjelajahi PEP-8 dengan beberapa contoh kode! Anda akan membahas topik-topik berikut:

  • Pertama, Anda akan diperkenalkan dengan PEP-8, apa itu dan mengapa Anda membutuhkannya;
  • Selanjutnya, Anda akan membahas indentasi, topik hangat di kalangan programmer. Haruskah Anda menggunakan tab atau spasi? Anda akan menemukan jawabannya di bagian ini;
  • Mungkin tidak terduga, tetapi ada panduan untuk panjang baris maksimum;
  • Ada juga cara yang disarankan untuk menangani baris kosong;
  • Berikutnya, spasi putih dalam ekspresi dan pernyataan juga sesuatu yang bisa Anda tangani dengan mudah sebagai pemula;
  • Apa itu encoding dan mengapa Anda membutuhkannya saat bekerja dengan Python? Apa encoding bawaan untuk Python3? Bagian encoding baris sumber akan membahas semuanya.
  • Anda mungkin sering melakukan import saat ngoding. Bagian ini akan membahas topik seperti urutan import, import absolut dan relatif, serta wildcard import, dll.;
  • Dokumentasi penting untuk melacak semua aspek aplikasi dan meningkatkan kualitas produk akhir secara keseluruhan. Komentar sangat penting di sini!
  • Apakah Anda tahu nama dunder tingkat modul? Ini sangat membantu dalam docstring!
  • Terakhir, Anda juga akan mempelajari lebih lanjut tentang konvensi penamaan: Anda akan mengetahui cara memberi nama fungsi, gaya penamaan apa yang biasanya digunakan, dan banyak lagi;
  • Apakah Kode Anda Mematuhi PEP-8? Ini jelas pertanyaan yang harus Anda tanyakan pada diri sendiri. Itulah sebabnya bagian terakhir membahas beberapa alat untuk membantu Anda memeriksa apakah kode Anda mematuhi pedoman yang disajikan dalam tulisan ini dan banyak lagi yang tidak dibahas di sini!

Pendahuluan ke PEP-8

Bahasa pemrograman Python telah berkembang menjadi salah satu bahasa yang disukai banyak orang. Bahasa ini relatif mudah dipelajari, mendukung multi-paradigma, memiliki banyak modul open source yang menambah kegunaannya, dan menjadi andalan komunitas data science serta pengembangan web.

Namun, Anda hanya dapat memanfaatkan keunggulan Python ketika Anda tahu cara mengekspresikan ide dengan lebih baik melalui kode Anda. Python dibuat dengan beberapa tujuan yang dapat Anda lihat saat Anda mengetik import this.

import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Di atas adalah 20 prinsip yang digunakan pemrograman Python, yang dikenal sebagai Zen of Python. Anda juga melihat "Readability Counts" pada keluaran di atas, yang seharusnya menjadi perhatian utama Anda saat menulis kode: programmer atau data scientist lain harus memahami dan dapat berkontribusi pada kode Anda agar dapat menyelesaikan tugas yang ada.

Bagian-bagian berikut akan memberi Anda wawasan lebih lanjut tentang bagaimana Anda dapat mewujudkan hal di atas!

Indentasi

Saat memrogram dengan Python, indentasi adalah sesuatu yang pasti akan Anda gunakan. Namun, Anda harus berhati-hati karena bisa menyebabkan kesalahan sintaks. Rekomendasinya adalah menggunakan empat spasi untuk indentasi. Misalnya, pernyataan ini menggunakan empat spasi indentasi:

if True:
    print("If works")

Begitu juga dengan loop for yang memiliki pernyataan print ini diindentasi dengan empat spasi:

for element in range(0, 5):
    print(element)

Saat Anda menulis ekspresi yang panjang, sebaiknya jaga agar ekspresi tersebut sejajar secara vertikal. Saat Anda melakukan ini, Anda akan membuat "hanging indent".

Berikut beberapa contoh hanging indent dalam ekspresi besar, yang menunjukkan variasi penggunaannya:

  1. value = square_of_numbers(num1, num2,
                           num3, num4)
    
  2. def square_of_number(
         num1, num2, num3, 
         num4):
     return num1**2, num2**2, num3**2, num4**2
    
  3. value = square_of_numbers(
                  num1, num2,
                  num3, num4)
    
  4. list_of_people = [
     "Rama",
     "John",
     "Shiva"
    ]
    
  5. dict_of_people_ages = {
     "ram": 25,
     "john": 29,
     "shiva": 26
    }
    

Setiap pengembang yang bekerja dengan Python atau bahasa pemrograman lain pada suatu titik akan bertanya pada diri sendiri apakah akan menggunakan tab atau spasi untuk indentasi. Perbedaan antara tab dan spasi adalah diskusi berkelanjutan di komunitas. Lihat, misalnya, artikel Stackoverflow ini.

Secara umum, spasi lebih disukai untuk indentasi, tetapi jika Anda menemukan beberapa skrip Python yang sudah menggunakan tab, Anda sebaiknya melanjutkan indentasi dengan tab. Jika tidak, Anda harus mengubah indentasi semua ekspresi di skrip Anda menjadi spasi.

Catatan bahwa Python 3 tidak mengizinkan pencampuran tab dan spasi untuk indentasi. Karena itu Anda harus memilih salah satu dan konsisten!

Panjang Baris Maksimum

Secara umum, disarankan menargetkan panjang baris 79 karakter dalam kode Python Anda.

Mengikuti angka target ini memiliki banyak keuntungan. Beberapa di antaranya:

  • Memungkinkan membuka file berdampingan untuk dibandingkan;
  • Anda dapat melihat seluruh ekspresi tanpa menggulir horizontal, yang meningkatkan keterbacaan dan pemahaman kode.

Komentar sebaiknya memiliki panjang baris 72 karakter. Anda akan mempelajari lebih lanjut konvensi paling umum untuk komentar nanti dalam tutorial ini!

Pada akhirnya, terserah Anda konvensi dan gaya penulisan kode apa yang ingin diikuti jika Anda bekerja dalam kelompok kecil, dan bagi sebagian besar pengembang, menyimpang dari pedoman panjang baris maksimum dapat diterima. Namun, jika Anda membuat atau berkontribusi pada proyek open source, Anda mungkin ingin dan/atau perlu mematuhi aturan panjang baris maksimum yang ditetapkan oleh PEP-8.

Saat menggunakan operator +, sebaiknya gunakan pemutusan baris yang tepat, yang membuat kode Anda lebih mudah dipahami:

Sebaiknya gunakan... Sebaiknya hindari...

total = (A +
B +
C)

total = (A
+ B
+ C)

Sebagai alternatif, Anda juga bisa menulis:

total = A
        + B
        + C

Singkatnya, Anda dapat menambahkan pemutusan sebelum atau sesudah operator biner, asalkan konsisten. Jika Anda menulis kode baru, cobalah mengikuti opsi terakhir yang disajikan, yaitu menambahkan pemutusan sebelum operator biner.

Baris Kosong

Dalam skrip Python, fungsi dan kelas tingkat atas dipisahkan oleh dua baris kosong. Definisi metode di dalam kelas dipisahkan oleh satu baris kosong. Anda dapat melihatnya jelas pada contoh berikut:

import unittest

class SwapTestSuite(unittest.TestCase):
    """
        Swap Operation Test Case
    """
    def setUp(self):
        self.a = 1
        self.b = 2

    def test_swap_operations(self):
        instance = Swap(self.a,self.b)
        value1, value2 =instance.get_swap_values()
        self.assertEqual(self.a, value2)
        self.assertEqual(self.b, value1)


class OddOrEvenTestSuite(unittest.TestCase):
    """
        This is the Odd or Even Test case Suite
    """
    def setUp(self):
        self.value1 = 1
        self.value2 = 2

    def test_odd_even_operations(self):
        instance1 = OddOrEven(self.value1)
        instance2 = OddOrEven(self.value2)
        message1 = instance1.get_odd_or_even()
        message2 = instance2.get_odd_or_even()
        self.assertEqual(message1, 'Odd')
        self.assertEqual(message2, 'Even')

Kelas SwapTestSuite dan OddOrEvenTestSuite dipisahkan oleh dua baris kosong, sedangkan definisi metode seperti .setUp() dan .test_swap_operations() hanya dipisahkan oleh satu baris kosong. Kodenya akan dieksekusi dengan sukses, tetapi tidak akan menghasilkan keluaran karena tidak ada kode untuk menjalankan unit test (ini hanya menampilkan praktik terbaik).

Spasi Putih dalam Ekspresi dan Pernyataan

Anda harus mencoba menghindari spasi putih berlebih ketika kode Anda ditulis seperti pada contoh berikut:

Sebaiknya gunakan... Sebaiknya hindari...

func(data, {pivot: 4})

func( data, { pivot: 4 } )

indexes = (0,)

indexes = (0, )

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

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

spam(1)

spam (1)

dct['key'] = lst[index]

dct ['key'] = lst [index]

x = 1
y = 2
long_variable = 3

x = 1
y = 2
long_variable = 3

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]

ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]

i = i + 1
submitted += 1
x = x2 - 1
hypot2 = x
x + yy
c = (a+b)
(a-b)

i=i+1
submitted +=1
x = x 2 - 1
hypot2 = x
x + y y
c = (a + b)
(a - b)

def complex(real, imag=0.0):
return magic(r=real, i=imag)

def complex(real, imag = 0.0):
return magic(r = real, i = imag)

def munge(input: AnyStr): ...
def munge() -> AnyStr: ...

def munge(input:AnyStr): ...
def munge()->PosInt: ...

def munge(sep: AnyStr = None): ...
def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...

def munge(input: AnyStr=None): ...
def munge(input: AnyStr, limit = 1000): ...

if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()


atau


if foo == 'blah': do_blah_thing()
for x in lst: total += x
while t < 10: t = delay()


atau


if foo == 'blah': do_blah_thing()
else: do_non_blah_thing()

try: something()
finally: cleanup()

do_one(); do_two(); do_three(long, argument,list, like, this)

if foo == 'blah': one(); two(); three()

FILES = ('setup.cfg',)

FILES = 'setup.cfg',

FILES = [
'setup.cfg',
'tox.ini',
]
initialize(FILES,
error=True,
)

FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

Contoh-contoh ini diambil dari PEP-8.

Pengodean Berkas Sumber

Komputer tidak dapat menyimpan "huruf", "angka", "gambar" atau apa pun; Komputer hanya dapat menyimpan dan bekerja dengan bit, yang hanya memiliki nilai biner: yes atau no, true atau false, 1 atau 0, dll. Seperti yang sudah Anda ketahui, komputer bekerja dengan listrik; Ini berarti bahwa bit "sebenarnya" adalah ada atau tidak adanya lonjakan listrik. Biasanya Anda merepresentasikan (ketiadaan) ini dengan 1 dan 0.

Untuk menggunakan bit guna merepresentasikan selain bit, Anda memerlukan seperangkat aturan. Anda perlu mengonversi urutan bit menjadi sesuatu seperti huruf, angka, dan gambar menggunakan skema pengodean atau encoding. Contoh skema encoding adalah ASCII, UTF-8, dll:

  • American Standard Code for Information Interchange (ASCII) adalah format paling umum untuk file teks di komputer dan di Internet. Dalam jenis berkas ini, setiap karakter alfabet, numerik, atau khusus direpresentasikan dengan angka biner 7-bit (untai tujuh 0 atau 1).
  • Unicode Worldwide Character Standard, atau singkatnya Unicode, adalah sistem untuk "pertukaran, pemrosesan, dan tampilan teks tertulis dari berbagai bahasa di dunia modern". Singkatnya, Unicode dirancang untuk mengakomodasi semua sistem penulisan yang dikenal di dunia. Unicode saat ini menggunakan tiga encoding berbeda untuk merepresentasikan himpunan karakter Unicode: UTF-8, UTF-16 dan UTF-32.
    • UTF-16 adalah encoding Unicode dengan panjang variabel: code point dikodekan dengan satu atau dua unit kode 16-bit.
    • UTF-8 adalah jenis encoding Unicode panjang variabel lainnya, menggunakan satu hingga empat byte 8-bit.
    • UTF-32 adalah encoding dengan panjang tetap yang menggunakan tepat 32 bit per code point Unicode.

Tip: jika Anda ingin tahu lebih banyak tentang encoding, lihat tulisan ini.

Sekarang, mengapa ini penting?

Anda akan mengetahui bahwa string adalah salah satu tipe data yang paling umum digunakan di Python. Seperti yang Anda harapkan, akan ada saatnya Anda ingin bekerja dengan string yang berisi atau seluruhnya terdiri dari karakter yang bukan bagian dari set ASCII standar. Bagaimanapun, bisa jadi Anda harus bekerja dengan teks yang berisi karakter beraksen, seperti á, ž, ç dll.

Sekarang, di Python 3, UTF-8 adalah encoding sumber bawaan. Namun, bagi Anda yang menggunakan Python 2, Anda mungkin sudah tahu bahwa bawaan di sana adalah ASCII.

Lalu bagaimana jika Anda memiliki string yang berisi karakter non-ASCII, seperti "Flügel"?

Saat Anda mereferensikan string tersebut di Python 2, Anda akan mendapatkan hal berikut:

>>> s 
'Fl\xfcgel'

Ini tidak terlihat seperti string Anda! Apa yang terjadi saat Anda mencetaknya?

>>> print(s)
Flügel

Pencetakan memberi Anda nilai yang Anda tetapkan ke variabel. Karakter non-ASCII Ì telah dienkode. Itulah mengapa Anda mendapatkan \xfc saat mereferensikan string. Untuk menanganinya, Anda dapat menggunakan metode string .encode() dan .decode(). Yang pertama mengembalikan versi string Unicode 8-bit yang dienkode dalam encoding yang diminta, sedangkan yang kedua menafsirkan string menggunakan encoding yang diberikan.

Import

Mengimpor library dan/atau modul adalah sesuatu yang sering Anda lakukan saat bekerja dengan Python untuk data science. Seperti yang mungkin sudah Anda ketahui, Anda harus selalu mengimpor library di awal skrip Anda.

Catatan bahwa jika Anda melakukan banyak import, pastikan setiap import ditulis pada satu baris.

Lihat tabel berikut untuk memahaminya lebih baik:

Sebaiknya gunakan... Sebaiknya hindari...

from config import settings


atau


import os
import sys

import os, sys

Selain itu, Anda harus memperhatikan bahwa ada urutan yang perlu dihormati saat mengimpor library. Secara umum, Anda dapat mengikuti urutan ini:

  1. Import pustaka standar.
  2. Import pihak ketiga terkait.
  3. Import khusus aplikasi/pustaka lokal.

Import Absolut dan Relatif

Selanjutnya, ada baiknya mengetahui perbedaan antara import absolut dan relatif. Secara umum, import absolut lebih disukai di Python, karena meningkatkan keterbacaan. Namun, saat aplikasi Anda menjadi lebih kompleks, Anda juga dapat menggunakan import relatif. Import relatif implisit tidak boleh digunakan dan telah dihapus di Python 3.

Lalu apa itu import absolut dan relatif?

  • Import absolut adalah import yang menggunakan path absolut dari fungsi atau kelas, dipisahkan oleh .. Contohnya,

      import sklearn.linear_model.LogisticRegression
    
  • Import relatif adalah import yang relatif terhadap posisi saat ini di mana berkas Python Anda berada. Anda dapat menggunakan jenis import ini jika struktur proyek Anda berkembang, karena akan membuat proyek Anda lebih mudah dibaca. Artinya, jika Anda memiliki struktur proyek Python seperti berikut:

      .
      ├── __init__.py
      ├── __init__.pyc
      ├── __pycache__
      │   ├── __init__.cpython-35.pyc
      │   ├── bubble_sort.cpython-35.pyc
      │   ├── selection_sort.cpython-35.pyc
      ├── bubble_sort.py
      ├── heap_sort.py
      ├── insertion_sort.py
      ├── insertion_sort.pyc
      ├── merge_sort.py
      ├── merge_sort.pyc
      ├── quick_sort.py
      ├── radix_sort.py
      ├── selection_sort.py
      ├── selection_sort.pyc
      ├── shell_sort.py
      ├── tests
      │   ├── test1.py
    

Anda dapat menggunakan import relatif untuk mengimpor algoritma bubble sort BubbleSort, yang disimpan di bubble_sort.py ke dalam test1. Bentuknya akan seperti ini:

from ..bubble_sort import BubbleSort

Jika Anda ingin tahu lebih banyak tentang import absolut dan relatif, Anda dapat melihat PEP 328.

Wildcard Import

Terakhir, sebaiknya Anda menghindari wildcard import, karena tidak menambah keterbacaan; Anda tidak memiliki pandangan jelas kelas, metode, atau variabel mana yang Anda gunakan dari modul Anda, misalnya:

from scikit import *

Komentar

Komentar digunakan untuk dokumentasi dalam kode di Python. Komentar meningkatkan pemahaman kode. Ada banyak alat yang dapat Anda gunakan untuk menghasilkan dokumentasi, seperti komentar dan docstring, untuk modul Anda sendiri. Komentar sebaiknya lebih detail agar ketika seseorang membaca kodenya, orang tersebut mendapatkan pemahaman yang tepat tentang kode dan bagaimana kode tersebut digunakan bersama bagian kode lainnya.

Komentar diawali dengan simbol #. Apa pun yang ditulis setelah tanda pagar tidak akan dieksekusi oleh interpreter. Misalnya, potongan kode berikut hanya akan mengembalikan "This is a Python comment".

# This is a Python single line comment
print("This is a Python comment")

Ingat: pada bagian sebelumnya, Anda membaca bahwa komentar sebaiknya memiliki panjang baris 72 karakter!

Dengan demikian, ada tiga jenis komentar:

  • Anda menggunakan komentar blok untuk menjelaskan kode yang lebih kompleks atau tidak familiar bagi orang lain. Ini biasanya komentar bentuk panjang dan berlaku untuk sebagian atau seluruh kode yang mengikutinya. Komentar blok diindentasi pada level yang sama dengan kode. Setiap baris komentar blok diawali dengan tanda pagar # dan satu spasi. Jika Anda perlu menggunakan lebih dari satu paragraf, pisahkan dengan baris yang hanya berisi satu #.

Lihat cuplikan berikut, diambil dari pustaka scikit-learn, untuk memahami seperti apa komentar-komentar ini:

   if Gram is None or Gram is False:
        Gram = None
        if copy_X:
            # force copy. setting the array to be fortran-ordered
            # speeds up the calculation of the (partial) Gram matrix
            # and allows to easily swap columns
            X = X.copy('F')
  • Anda sebaiknya menggunakan komentar inline secara hemat, meskipun bisa efektif saat perlu menjelaskan sebagian kode Anda. Komentar ini juga dapat membantu Anda mengingat arti baris kode tertentu atau berguna saat berkolaborasi dengan seseorang yang tidak familiar dengan semua aspek kode Anda. Anda menggunakan komentar inline pada baris yang sama dengan pernyataan, mengikuti kodenya. Komentar ini juga dimulai dengan # dan satu spasi.

Contohnya:

counter = 0  # initialize the counter
  • Anda menulis string dokumentasi atau docstring di awal modul, berkas, kelas, dan metode publik. Jenis komentar ini dimulai dengan """ dan diakhiri dengan """:
    """
        This module is intended to provide functions for scientific computing 
    """

Nama dunder Tingkat Modul

Setelah Anda membaca apa itu docstring, Anda juga harus mengetahui tentang dunder tingkat modul, atau nama dengan dua garis bawah di awal dan dua di akhir, yang sangat efektif di Python. Ini adalah nama khusus yang didefinisikan Python agar tidak bertabrakan dengan fungsi atau nama yang ditentukan pengguna. Untuk informasi lebih lanjut, Anda dapat melihat artikel ini.

Dunder tingkat modul seperti (__all__, __author__, __version__) harus ditempatkan pada docstring utama modul dan harus berada sebelum semua pernyataan import. Anda harus mendefinisikan import from __future__ sebelum kode lain apa pun, kecuali docstring:

"""
    Algos module consists of all the basic algorithms and their implementation
"""

from __future__ import print

__all__ = ['searching', 'sorting']
__version__ = '0.0.1'
__author__ = 'Chitrank Dixit'

import os
import sys

Tip: lihat konvensi berikut untuk menulis docstring.

Konvensi Penamaan

Saat Anda memrogram dengan Python, Anda hampir pasti akan menggunakan konvensi penamaan, seperangkat aturan untuk memilih urutan karakter yang harus digunakan untuk identifier yang menunjukkan variabel, tipe, fungsi, dan entitas lain dalam kode sumber dan dokumentasi.

Jika Anda tidak yakin gaya penamaan apa saja yang ada, pertimbangkan yang berikut:

  • b atau satu huruf kecil;
  • B atau satu huruf besar;
  • lowercase
  • UPPERCASE
  • lower_case_with_underscores
  • UPPER_CASE_WITH_UNDERSCORES
  • CapitalizedWords, yang juga dikenal sebagai CapWords, CamelCase atau StudlyCaps.
  • mixedCase
  • Capitalized_Words_With_Underscores
  • _single_leading_underscore: indikator lemah untuk "penggunaan internal". misalnya, from M import * tidak mengimpor objek yang namanya diawali garis bawah.
  • single_trailing_underscore_: digunakan berdasarkan konvensi untuk menghindari konflik dengan kata kunci Python, misalnya, Tkinter.Toplevel(master, class_='ClassName')
  • __double_leading_underscore: saat menamai atribut kelas, memicu name mangling (di dalam kelas FooBar, __boo menjadi _FooBar__boo).
  • __double_leading_and_trailing_underscore__: objek atau atribut "magis" yang berada di namespace yang dikendalikan pengguna. Misalnya, __init__, __import__ atau __file__. Anda tidak boleh menciptakan nama seperti itu, hanya menggunakannya sebagaimana didokumentasikan.

Konvensi Penamaan Umum

Tabel berikut menunjukkan beberapa pedoman umum tentang cara menamai identifier Anda:

Identifier Konvensi
Modul lowercase
Kelas CapWords
Fungsi lowercase
Metode lowercase
Type variables CapWords
Konstanta UPPERCASE
Paket lowercase
  • Jangan gunakan 'l', 'O' atau 'I' sebagai nama variabel tunggal: karakter ini terlihat mirip dengan nol (0) dan (1) dalam beberapa font.
  • Secara umum, sebaiknya gunakan nama yang pendek jika memungkinkan. Dalam beberapa kasus, Anda dapat menggunakan garis bawah untuk meningkatkan keterbacaan.

Jika Anda ingin mengetahui lebih banyak pengecualian terhadap konvensi penamaan umum, lihat artikel ini.

Apakah Kode Anda Mematuhi PEP-8?

Setelah mempelajari lebih lanjut tentang PEP-8, Anda mungkin bertanya-tanya bagaimana cara memeriksa apakah kode Anda benar-benar mematuhi pedoman ini (dan lainnya yang belum dibahas dalam tutorial ini!).

Selain memeriksa PEP-8 sendiri dan mempelajarinya lebih lanjut, Anda juga sebaiknya mempertimbangkan modul pep8, paket coala, dan beberapa alternatif lain yang dijelaskan pada bagian berikutnya!

Paket Python pep8

Paket pep8 dapat digunakan untuk memeriksa ketidakpatuhan PEP-8 dalam kode Python Anda dan menyarankan perubahan agar mengikuti pedoman PEP-8. Anda dapat memasang modul pep8 menggunakan pip dengan menjalankan perintah berikut:

pip install pep8

Untuk mendemonstrasikan cara kerja pep8, buat berkas Python baru bernama example.py dengan kode berikut:

def my_function(a, b):
    print("The sum of a and b is: ", a + b)

a = 1
b = 2

my_function(a,b)

Simpan berkasnya lalu jalankan perintah pep8 pada berkas tersebut di terminal atau command prompt Anda sebagai berikut:

pep8 example.py

Ini akan menampilkan ketidakpatuhan PEP-8 yang dideteksi pep8 dalam kode, seperti ini:

example.py:1:1: E302 expected 2 blank lines, found 0
example.py:3:5: E225 missing whitespace around operator
example.py:5:5: E225 missing whitespace around operator

Baris pertama keluaran menunjukkan bahwa harus ada dua baris kosong sebelum definisi fungsi pada baris 1. Dua baris berikutnya menunjukkan bahwa harus ada spasi di sekitar operator penjumlahan pada pernyataan print dan pernyataan penugasan.

Untuk memperbaiki masalah ini, Anda dapat memodifikasi kode seperti berikut:

def my_function(a, b):
    print("The sum of a and b is:", a + b)

a = 1
b = 2

my_function(a, b)

Sekarang, saat Anda menjalankan pep8 example.py lagi, tidak akan ada keluaran, yang menunjukkan bahwa kode sekarang mematuhi PEP-8.

Anda juga dapat melihat kode sumber tempat ketidakpatuhan ditemukan dengan argumen --show-source:

$ pep8 --show-source --show-pep8 testsuite/E40.py
testsuite/E40.py:2:10: E401 multiple imports on one line
import os, sys
         ^
    Imports should usually be on separate lines.

    Okay: import os\nimport sys
    E401: import sys, os

Atau Anda dapat menampilkan seberapa sering setiap kesalahan ditemukan dengan menambahkan --statistics:

$ pep8 --statistics -qq Python-2.5/Lib
232     E201 whitespace after '['
599     E202 whitespace before ')'
631     E203 whitespace before ','
842     E211 whitespace before '('
2531    E221 multiple spaces before operator
4473    E301 expected 1 blank line, found 0
4006    E302 expected 2 blank lines, found 1
165     E303 too many blank lines (4)
325     E401 multiple imports on one line
3615    E501 line too long (82 characters)
612     W601 .has_key() is deprecated, use 'in'
1188    W602 deprecated form of raising exception

Tip: pastikan juga memeriksa modul lain, seperti flake8, autopep8 atau pylint!

Menganalisis Kode Anda dengan coala

coala menyediakan linting dan perbaikan untuk semua bahasa, tetapi karena Anda lebih fokus pada pemrograman Python di sini, Anda dapat memasang coala menggunakan pip:

$ pip3 install coala-bears

Pada potongan kode di atas, Anda melihat bahwa sebenarnya Anda memasang coala-bears: bears adalah plugin atau modul sederhana yang memperluas kapabilitas coala Anda dan berbeda-beda antar bahasa. Dalam kasus ini, Anda ingin menggunakan pep8bear, yang menemukan kode yang tidak kompatibel dengan PEP-8 dan memperbaikinya di tempat. Anda sebaiknya mempertimbangkan menggunakan ini untuk memeriksa kode Python Anda.

$ coala -S python.bears=PEP8Bear python.files=\*\*/\*.py \
python.default_actions=PEP8Bear:ApplyPatchAction --save
# other output ...
Executing section python...
[INFO][11:03:37] Applied 'ApplyPatchAction' for 'PEP8Bear'.
[INFO][11:03:37] Applied 'ApplyPatchAction' for 'PEP8Bear'.

pep8online: Periksa Kode Python Anda Secara Daring

Selain modul pep8 yang praktis dan paket coala, Anda juga dapat memeriksa apakah kode Python Anda mematuhi PEP-8 dengan mengunjungi pep8online. Situs ini memiliki editor daring yang memungkinkan Anda menempelkan kode, lalu menekan tombol "Check code"! Hasilnya, Anda akan mendapatkan masukan tentang apa yang perlu diperbaiki. Praktis dan berguna!

Kesimpulan

Saat menggunakan Python, terkadang Anda tidak terlalu memedulikan kualitas kode karena kegelisahan untuk merilis fitur lebih cepat. Namun, praktik yang dijelaskan dalam tutorial ini —dan banyak lagi yang tidak dibahas di sini— seharusnya menjadi bagian dari siklus develop-staging-test-deploy Anda. Ini menguntungkan semua orang yang mengerjakan proyek untuk memahami, dan sering kali perubahan pada kode dapat dilakukan tanpa perlu menggali terlalu dalam dan memahami kode dengan memulai debugger. Jika Anda bekerja pada proyek open source, kontributor Anda akan menganggap PEP-8 sangat membantu dan akan lebih memahami kode Anda karena ini adalah standar universal yang diikuti setiap pengembang Python.

Setelah Anda melalui tutorial ini, sangat disarankan untuk memeriksa PEP-8 sendiri! Masih banyak yang bisa ditemukan.

Jika Anda memiliki tips lain tentang cara mematuhi PEP-8 atau jika menurut Anda kami melewatkan sesuatu yang penting dalam artikel ini, jangan ragu untuk memberi tahu kami di @DataCamp.

Topik
Python
Data Science

Kursus Python

{count, plural, one {Kursus} other {Kursus}}

Pengantar Python

{hours} jam
7.1M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya