Dengan tutorial pemula ini, Anda akan mulai menjelajahi PEP-8, panduan gaya Python, sehingga Anda dapat mulai memformat kode dengan benar untuk memaksimalkan keterbacaannya!
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.
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!Didukung oleh
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:
Begitu juga dengan loop for yang memiliki pernyataan print ini diindentasi dengan empat spasi:
for element inrange(0,5):print(element)Didukung oleh
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:
value = square_of_numbers(num1, num2,
num3, num4)Didukung oleh
defsquare_of_number(
num1, num2, num3,
num4):return num1**2, num2**2, num3**2, num4**2Didukung oleh
value = square_of_numbers(
num1, num2,
num3, num4)Didukung oleh
list_of_people =["Rama","John","Shiva"]Didukung oleh
dict_of_people_ages ={"ram":25,"john":29,"shiva":26}Didukung oleh
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:
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
classSwapTestSuite(unittest.TestCase):"""
Swap Operation Test Case
"""defsetUp(self):
self.a =1
self.b =2deftest_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)classOddOrEvenTestSuite(unittest.TestCase):"""
This is the Odd or Even Test case Suite
"""defsetUp(self):
self.value1 =1
self.value2 =2deftest_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')Didukung oleh
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:
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:
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:
Import pustaka standar.
Import pihak ketiga terkait.
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
Didukung oleh
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:
Anda dapat menggunakan import relatif untuk mengimpor algoritma bubble sort BubbleSort, yang disimpan di bubble_sort.py ke dalam test1. Bentuknya akan seperti ini:
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:
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 commentprint("This is a Python comment")Didukung oleh
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 #.
if Gram isNoneor Gram isFalse:
Gram =Noneif 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')Didukung oleh
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.
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
"""Didukung oleh
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__ importprint
__all__ =['searching','sorting']
__version__ ='0.0.1'
__author__ ='Chitrank Dixit'import os
import sys
Didukung oleh
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:
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 operatorDidukung oleh
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:
defmy_function(a, b):print("The sum of a and b is:", a + b)
a =1
b =2
my_function(a, b)Didukung oleh
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
Didukung oleh
Atau Anda dapat menampilkan seberapa sering setiap kesalahan ditemukan dengan menambahkan --statistics:
$ pep8 --statistics -qq Python-2.5/Lib
232E201 whitespace after '['599E202 whitespace before ')'631E203 whitespace before ','842E211 whitespace before '('2531E221 multiple spaces before operator
4473E301 expected 1 blank line, found 04006E302 expected 2 blank lines, found 1165E303 too many blank lines(4)325E401 multiple imports on one line
3615E501 line too long(82 characters)612W601.has_key() is deprecated, use 'in'1188W602 deprecated form of raising exception
Didukung oleh
coala menyediakan linting dan perbaikan untuk semua bahasa, tetapi karena Anda lebih fokus pada pemrograman Python di sini, Anda dapat memasang coala menggunakan pip:
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'.Didukung oleh
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.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
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.
Selami ilmu data dengan Python dan pelajari cara menganalisis serta memvisualisasikan data Anda secara efektif. Tak perlu pengalaman atau keterampilan coding.
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:
Dalam tulisan ini, Anda akan mulai menjelajahi PEP-8 dengan beberapa contoh kode! Anda akan membahas topik-topik berikut:
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.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:
Begitu juga dengan loop
foryang memiliki pernyataanprintini diindentasi dengan empat spasi: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:
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:
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:total = (A +B +
C)
total = (A+ B
+ C)
Sebagai alternatif, Anda juga bisa menulis:
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:
Kelas
SwapTestSuitedanOddOrEvenTestSuitedipisahkan 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:
func(data, {pivot: 4})func( data, { pivot: 4 } )indexes = (0,)indexes = (0, )if x == 4: print x, y; x, y = y, xif x == 4 : print x , y ; x , y = y , xspam(1)spam (1)dct['key'] = lst[index]dct ['key'] = lst [index]x = 1y = 2
long_variable = 3
x = 1y = 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 + 1submitted += 1
x = x2 - 1
hypot2 = xx + yy
c = (a+b) (a-b)
i=i+1submitted +=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:
yesatauno,trueataufalse,1atau0, 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 dengan1dan0.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:
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:
Ini tidak terlihat seperti string Anda! Apa yang terjadi saat Anda mencetaknya?
Pencetakan memberi Anda nilai yang Anda tetapkan ke variabel. Karakter non-ASCII
ÃŒtelah dienkode. Itulah mengapa Anda mendapatkan\xfcsaat 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:
from config import settingsatau
import osimport sys
import os, sysSelain itu, Anda harus memperhatikan bahwa ada urutan yang perlu dihormati saat mengimpor library. Secara umum, Anda dapat mengikuti urutan ini:
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 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:
Anda dapat menggunakan import relatif untuk mengimpor algoritma bubble sort
BubbleSort, yang disimpan dibubble_sort.pyke dalamtest1. Bentuknya akan seperti ini: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:
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".Ingat: pada bagian sebelumnya, Anda membaca bahwa komentar sebaiknya memiliki panjang baris 72 karakter!
Dengan demikian, ada tiga jenis komentar:
#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:#dan satu spasi.Contohnya:
"""dan diakhiri dengan""":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 pernyataanimport. Anda harus mendefinisikan importfrom __future__sebelum kode lain apa pun, kecuali docstring: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:
batau satu huruf kecil;Batau satu huruf besar;lowercaseUPPERCASElower_case_with_underscoresUPPER_CASE_WITH_UNDERSCORESCapitalizedWords, yang juga dikenal sebagaiCapWords,CamelCaseatauStudlyCaps.mixedCaseCapitalized_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 kelasFooBar,__boomenjadi_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:
0) dan (1) dalam beberapa font.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, paketcoala, dan beberapa alternatif lain yang dijelaskan pada bagian berikutnya!Paket Python
pep8Paket
pep8dapat digunakan untuk memeriksa ketidakpatuhan PEP-8 dalam kode Python Anda dan menyarankan perubahan agar mengikuti pedoman PEP-8. Anda dapat memasang modulpep8menggunakan pip dengan menjalankan perintah berikut:Untuk mendemonstrasikan cara kerja
pep8, buat berkas Python baru bernamaexample.pydengan kode berikut:Simpan berkasnya lalu jalankan perintah
pep8pada berkas tersebut di terminal atau command prompt Anda sebagai berikut:Ini akan menampilkan ketidakpatuhan PEP-8 yang dideteksi pep8 dalam kode, seperti ini:
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
printdan pernyataan penugasan.Untuk memperbaiki masalah ini, Anda dapat memodifikasi kode seperti berikut:
Sekarang, saat Anda menjalankan
pep8 example.pylagi, 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:Atau Anda dapat menampilkan seberapa sering setiap kesalahan ditemukan dengan menambahkan
--statistics:Tip: pastikan juga memeriksa modul lain, seperti
flake8,autopep8ataupylint!Menganalisis Kode Anda dengan
coalacoalamenyediakan linting dan perbaikan untuk semua bahasa, tetapi karena Anda lebih fokus pada pemrograman Python di sini, Anda dapat memasangcoalamenggunakanpip:Pada potongan kode di atas, Anda melihat bahwa sebenarnya Anda memasang
coala-bears:bearsadalah plugin atau modul sederhana yang memperluas kapabilitascoalaAnda dan berbeda-beda antar bahasa. Dalam kasus ini, Anda ingin menggunakanpep8bear, yang menemukan kode yang tidak kompatibel dengan PEP-8 dan memperbaikinya di tempat. Anda sebaiknya mempertimbangkan menggunakan ini untuk memeriksa kode Python Anda.pep8online: Periksa Kode Python Anda Secara Daring
Selain modul
pep8yang praktis dan paketcoala, 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.