Sintaks Utama #
Python dirancang dengan filosofi bahwa kode harus mudah dibaca seperti teks biasa. Filosofi ini tercermin langsung pada sintaksnya: tidak ada kurung kurawal {} untuk menandai blok, tidak ada titik koma ; di akhir baris, dan struktur kode ditentukan oleh indentasi yang konsisten. Bagi yang datang dari bahasa lain seperti Java atau C, ini terasa asing di awal — tapi justru inilah yang membuat kode Python bisa dibaca hampir seperti pseudocode. Artikel ini membahas fondasi sintaks Python yang perlu kamu pahami sebelum menulis kode apapun.
Indentasi sebagai Struktur Blok #
Ini adalah hal paling fundamental yang membedakan Python dari mayoritas bahasa lain. Di Python, indentasi bukan sekadar gaya — indentasi adalah sintaks. Interpreter Python menggunakan indentasi untuk menentukan di mana sebuah blok kode dimulai dan berakhir.
# ANTI-PATTERN: tidak ada indentasi di dalam blok if
if True:
print("ini akan error") # IndentationError
# BENAR: blok kode harus diindentasi satu level ke dalam
if True:
print("ini benar")
Aturan indentasi yang perlu kamu pegang:
# Gunakan 4 spasi per level indentasi (standar PEP 8)
def hitung_nilai(nilai):
if nilai >= 90:
return "A"
elif nilai >= 75:
return "B"
elif nilai >= 60:
return "C"
else:
return "D"
# Blok bersarang menambah 4 spasi lagi per level
for i in range(3): # level 1: 0 spasi
for j in range(3): # level 2: 4 spasi
if i == j: # level 3: 8 spasi
print(i, j) # level 4: 12 spasi
Jangan campur tab dan spasi dalam satu file. Python 3 menolak file yang mencampur keduanya dan akan melempar TabError. Atur editor kamu untuk mengubah Tab menjadi 4 spasi secara otomatis — hampir semua editor modern mendukung ini.
Struktur Pernyataan (Statement) #
Setiap baris di Python secara default adalah satu pernyataan. Python tidak membutuhkan tanda pemisah di akhir baris seperti titik koma ; yang wajib di C, Java, atau PHP.
# ANTI-PATTERN: titik koma di akhir baris (tidak error, tapi tidak idiomatis)
nama = "Alice";
umur = 25;
print(nama);
# BENAR: tanpa titik koma
nama = "Alice"
umur = 25
print(nama)
Beberapa pernyataan boleh ditulis dalam satu baris menggunakan titik koma, tapi ini umumnya dihindari karena mengurangi keterbacaan:
# ANTI-PATTERN: beberapa statement dalam satu baris
x = 1; y = 2; z = 3
# BENAR: satu statement per baris
x = 1
y = 2
z = 3
Melanjutkan Baris yang Panjang #
Jika sebuah pernyataan terlalu panjang, kamu bisa melanjutkannya ke baris berikutnya dengan dua cara:
# Cara 1: backslash sebagai tanda sambung (kurang disukai)
hasil = nilai_ujian + nilai_tugas + \
nilai_praktikum + nilai_kehadiran
# Cara 2: bungkus dalam tanda kurung (lebih disukai)
hasil = (
nilai_ujian
+ nilai_tugas
+ nilai_praktikum
+ nilai_kehadiran
)
# Cara ini juga berlaku untuk list, dict, dan function call
warna_favorit = [
"merah",
"biru",
"hijau",
"kuning",
]
Kata Kunci (Keywords) #
Kata kunci adalah kata-kata yang sudah memiliki makna khusus di Python dan tidak boleh digunakan sebagai nama variabel, fungsi, atau identifier lainnya.
import keyword
print(keyword.kwlist)
Output:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try',
'while', 'with', 'yield']
Daftar kata kunci dan fungsinya:
| Kategori | Kata Kunci |
|---|---|
| Nilai khusus | True, False, None |
| Operator logika | and, or, not, in, is |
| Percabangan | if, elif, else |
| Perulangan | for, while, break, continue, pass |
| Fungsi & kelas | def, return, lambda, class, yield |
| Penanganan error | try, except, finally, raise, assert |
| Import modul | import, from, as |
| Scope variabel | global, nonlocal, del |
| Async | async, await |
| Context manager | with |
# ANTI-PATTERN: menggunakan keyword sebagai nama variabel
list = [1, 2, 3] # menimpa built-in 'list'
type = "integer" # menimpa built-in 'type'
id = 42 # menimpa built-in 'id'
# BENAR: gunakan nama yang deskriptif dan tidak bentrok
angka_list = [1, 2, 3]
tipe_data = "integer"
user_id = 42
Ekspresi dan Nilai #
Ekspresi adalah kombinasi nilai, variabel, dan operator yang menghasilkan sebuah nilai. Setiap ekspresi di Python menghasilkan nilai yang bisa langsung digunakan.
# Ekspresi aritmatika
10 + 5 # → 15
10 / 3 # → 3.3333... (selalu float di Python 3)
10 // 3 # → 3 (pembagian bulat)
10 % 3 # → 1 (sisa bagi / modulo)
2 ** 8 # → 256 (pemangkatan)
# Ekspresi perbandingan (selalu menghasilkan True atau False)
10 > 5 # → True
10 == 10 # → True
10 != 5 # → True
"abc" < "abd" # → True (perbandingan leksikografis)
# Ekspresi logika
True and False # → False
True or False # → True
not True # → False
# Ekspresi string
"Hello" + " " + "World" # → "Hello World" (concatenation)
"Ha" * 3 # → "HaHaHa" (repetition)
Ekspresi Kondisional (Ternary) #
Python memiliki bentuk ekspresi kondisional satu baris yang sering disebut ternary expression:
# ANTI-PATTERN: if-else panjang untuk assignment sederhana
if nilai >= 60:
status = "lulus"
else:
status = "tidak lulus"
# BENAR: ternary expression — lebih ringkas untuk kasus sederhana
status = "lulus" if nilai >= 60 else "tidak lulus"
# Contoh lain
label = "genap" if angka % 2 == 0 else "ganjil"
absolut = x if x >= 0 else -x
Input dan Output #
Input dan output adalah dua operasi paling dasar yang kamu butuhkan untuk berinteraksi dengan pengguna.
Output dengan print() #
# print() dasar
print("Hello, World!") # → Hello, World!
print(42) # → 42
print(3.14) # → 3.14
print(True) # → True
# Mencetak beberapa nilai sekaligus
nama = "Budi"
umur = 25
print(nama, umur) # → Budi 25 (dipisah spasi)
print(nama, umur, sep=", ") # → Budi, 25 (separator custom)
print(nama, end="") # tanpa newline di akhir
print(" " + str(umur)) # → Budi 25 (dilanjutkan di baris yang sama)
# f-string (cara paling modern dan direkomendasikan)
print(f"Nama: {nama}, Umur: {umur}") # → Nama: Budi, Umur: 25
print(f"Hasil: {10 + 5}") # → Hasil: 15
print(f"Pi: {3.14159:.2f}") # → Pi: 3.14 (format 2 desimal)
print(f"{nama!r}") # → 'Budi' (dengan tanda kutip)
Input dari Pengguna #
# input() selalu mengembalikan string
nama = input("Masukkan nama kamu: ")
print(f"Halo, {nama}!")
# ANTI-PATTERN: lupa konversi tipe saat input angka
umur = input("Masukkan umur: ")
tahun_lahir = 2024 - umur # TypeError: unsupported operand type(s) for -: 'int' and 'str'
# BENAR: konversi tipe secara eksplisit
umur = int(input("Masukkan umur: "))
tinggi = float(input("Masukkan tinggi badan (cm): "))
tahun_lahir = 2024 - umur # sekarang bekerja dengan benar
Konvensi Penamaan #
Python memiliki konvensi penamaan yang sudah disepakati komunitas melalui PEP 8. Mengikuti konvensi ini membuat kode kamu lebih mudah dibaca oleh developer Python lain.
# variabel dan fungsi → snake_case
nama_lengkap = "John Doe"
jumlah_siswa = 30
def hitung_rata_rata(nilai_list):
return sum(nilai_list) / len(nilai_list)
# konstanta → UPPER_SNAKE_CASE
BATAS_USIA = 18
TARIF_PAJAK = 0.11
DATABASE_URL = "postgresql://localhost/mydb"
# kelas → PascalCase
class PenggunaBaru:
pass
class HttpRequestHandler:
pass
# private (konvensi, bukan enforcement) → prefix underscore
class AkunBank:
def __init__(self):
self._saldo = 0 # protected (satu underscore)
self.__pin = "1234" # private (dua underscore)
# "magic" method → dua underscore di kedua sisi
class Persegi:
def __init__(self, sisi):
self.sisi = sisi
def __str__(self):
return f"Persegi dengan sisi {self.sisi}"
Ringkasan konvensi penamaan:
| Tipe | Konvensi | Contoh |
|---|---|---|
| Variabel | snake_case |
nama_file, total_harga |
| Fungsi | snake_case |
hitung_nilai(), baca_data() |
| Kelas | PascalCase |
DataPengguna, HttpClient |
| Konstanta | UPPER_SNAKE_CASE |
MAX_RETRY, API_KEY |
| Modul/file | snake_case |
utils.py, data_parser.py |
| Package/folder | snake_case |
my_project/, data_utils/ |
Import Modul #
Python menggunakan sistem modul untuk mengorganisasi kode. Kamu bisa mengimpor modul standar, paket pihak ketiga, atau file Python milikmu sendiri.
# Import modul penuh
import math
import os
import sys
print(math.pi) # → 3.141592653589793
print(math.sqrt(16)) # → 4.0
# Import dengan alias (berguna untuk nama yang panjang)
import numpy as np
import pandas as pd
# Import fungsi/class tertentu saja
from math import pi, sqrt, floor
from os.path import join, exists, dirname
print(pi) # → 3.141592653589793
print(sqrt(25)) # → 5.0
# ANTI-PATTERN: import wildcard — tidak jelas apa yang diimport
from math import *
from os.path import *
# BENAR: import eksplisit apa yang kamu butuhkan
from math import pi, sqrt
from os.path import join, exists
Urutan import yang disepakati PEP 8: (1) stdlib Python, (2) library pihak ketiga, (3) modul lokal. Pisahkan tiap kelompok dengan satu baris kosong. Tool seperti isort bisa mengurutkannya otomatis.
Bagaimana Python Mengeksekusi Kode? #
Meskipun Python sering disebut sebagai bahasa pemrograman interpreter (di mana kode dieksekusi baris demi baris), di balik layar Python sebenarnya melalui proses kompilasi terlebih dahulu. Memahami alur kerja ini akan membantu Anda memahami mengapa kesalahan sintaksis (SyntaxError) langsung terdeteksi sebelum kode sempat dijalankan sama sekali.
Berikut adalah diagram alur kompilasi dan eksekusi program Python dari kode sumber hingga menjadi keluaran di mesin Anda:
flowchart LR
Source["Kode Sumber (.py)"] --> Parser["Parser (AST)"]
Parser --> Compiler["Kompilator Bytecode"]
Compiler --> Bytecode["Bytecode (.pyc)"]
Bytecode --> PVM["PVM (Python Virtual Machine)"]
PVM --> Output["Keluaran (Output)"]
Penjelasan singkat mengenai alur di atas:
- Kode Sumber (.py): Berkas teks berisi kode Python yang Anda tulis.
- Parser (AST): Menerjemahkan kode sumber menjadi Abstract Syntax Tree (AST) untuk memeriksa apakah penulisan kode mematuhi aturan sintaksis Python. Jika ada kesalahan, SyntaxError akan dilempar di tahap ini.
- Kompilator Bytecode: Mengubah AST menjadi instruksi tingkat rendah yang disebut bytecode.
- Bytecode (.pyc): Hasil kompilasi berupa instruksi bytecode (biasanya disimpan di dalam folder
__pycache__sebagai berkas.pycagar tidak perlu dikompilasi ulang di jalankan berikutnya). - Python Virtual Machine (PVM): PVM adalah interpreter yang membaca bytecode dan menerjemahkannya ke dalam bahasa mesin agar bisa dieksekusi oleh sistem operasi Anda.
Kesalahan Sintaks yang Paling Sering Ditemui #
Mengenali pola kesalahan sejak awal akan menghemat banyak waktu debugging. Berikut adalah error sintaks yang paling umum dialami pemula Python:
# 1. Lupa tanda titik dua setelah if/for/while/def/class
if x > 0 # SyntaxError: expected ':'
print(x)
# BENAR:
if x > 0:
print(x)
# ---
# 2. Indentasi tidak konsisten
def sapa(nama):
print("Halo")
print(nama) # IndentationError: unexpected indent
# ---
# 3. Tanda kurung tidak seimbang
print("Hello" # SyntaxError: '(' was never closed
hasil = (1 + 2 # SyntaxError: '(' was never closed
# ---
# 4. Penggunaan = dan == yang tertukar
if x = 10: # SyntaxError: invalid syntax (ini assignment, bukan perbandingan)
pass
# BENAR:
if x == 10: # perbandingan
pass
# ---
# 5. String tidak ditutup
pesan = "Halo dunia # SyntaxError: EOL while scanning string literal
# BENAR:
pesan = "Halo dunia"
# ---
# 6. Akses variabel sebelum didefinisikan
print(hasil) # NameError: name 'hasil' is not defined
hasil = 100
Ringkasan #
- Indentasi adalah sintaks — Python menggunakan indentasi (4 spasi) untuk menentukan blok kode, bukan kurung kurawal. Konsistensi indentasi adalah wajib, bukan opsional.
- Jangan campur tab dan spasi — Python 3 menolak file yang mencampur keduanya; atur editor untuk mengubah Tab menjadi 4 spasi.
- Tidak perlu titik koma — satu baris satu pernyataan, tanpa
;di akhir. Gunakan tanda kurung untuk melanjutkan baris panjang.- Hindari nama variabel yang menimpa built-in — jangan gunakan
list,type,id,input, dll. sebagai nama variabel.- f-string adalah cara terbaik untuk format string — lebih ringkas dan mudah dibaca dibanding
%formatting ataustr.format().- input() selalu mengembalikan string — konversi tipe dengan
int(),float(), dll. sebelum digunakan dalam operasi numerik.- Ikuti konvensi PEP 8 —
snake_caseuntuk variabel dan fungsi,PascalCaseuntuk kelas,UPPER_SNAKE_CASEuntuk konstanta.- Import eksplisit, bukan wildcard —
from math import pi, sqrtjauh lebih baik daripadafrom math import *.