Misalkan Anda ingin menampilkan nama dan profesi seseorang. Anda bisa menulis program sederhana seperti berikut.
# Define variables
name ='Mark'
profession ='Astronaut'
age =7# Output info
output_string =('My name is '+ name +', I am '+str(age)+' years old '+'and my profession is '+ profession +'.')print(output_string)Didukung oleh
My name is Mark, I am 7 years old and my profession is Astronaut.Didukung oleh
Pendekatan tersebut kurang ringkas dan kurang mudah dibaca. Untungnya, interpolasi string menawarkan solusi yang lebih baik. Teknik ini memungkinkan variabel, ekspresi, atau keluaran fungsi disisipkan langsung ke dalam string, sehingga manipulasi string menjadi dinamis dan menghilangkan kebutuhan penggabungan manual.
Dengan pendekatan interpolasi string, kita dapat menulis ulang kode sebagai berikut.
# Define variables
name ='Mark'
profession ='Astronaut'
age =7# Output info
output_string =f'My name is {name}, I am {age} years old and my profession is {profession}.'print(output_string)Didukung oleh
My name is Mark, I am 7 years old and my profession is Astronaut.Didukung oleh
Versi dengan interpolasi string memungkinkan penyematan ekspresi langsung di dalam string tanpa menggunakan penggabungan yang berantakan. Seperti yang Anda lihat, ini jauh lebih bersih.
Interpolasi String Dasar di Python
Ada beberapa teknik interpolasi string yang tersedia di Python. Metode yang paling umum direkomendasikan adalah formatted string literals, atau f-strings, yang tersedia sejak Python 3.6.
Metode lain yang umum ditemui pada kode yang lebih lama dari Python 3.6 adalah metode .format(). Meskipun metode ini lebih panjang daripada f-strings, sesekali ia memiliki keunggulan tersendiri (rincian di bawah).
Terakhir, Anda mungkin menemui pemformatan bergaya % pada kode warisan (legacy).
Menggunakan f-strings (Python 3.6+)
f-strings (formatted string literal) adalah cara yang kuat dan ringkas untuk memformat string di Python. Diperkenalkan pada Python 3.6, ia menyediakan cara yang mudah dibaca dan efisien untuk menyisipkan variabel, ekspresi, dan pemanggilan fungsi langsung ke dalam string.
Contoh sederhana sintaks dasar f-string adalah sebagai berikut.
name ='Mark'
output_string =f'My name is {name}.'print(output_string)Didukung oleh
Dalam kode ini, variabel output_string diberi f-string. Awalan f sebelum tanda kutip pembuka menunjukkan bahwa string mendukung ekspresi yang disematkan. Variabel name dievaluasi dan nilainya disisipkan ke dalam string, menghasilkan keluaran: "My name is Mark."
Tidak hanya nilai variabel, perhitungan atau ekspresi pun dapat disisipkan ke dalam f-strings. Perhatikan contoh ini.
import math
a =3.0
b =4.0# Use string interpolation for the formulaprint(f'The hypotenuse of a triangle with base {a} and side {b} is {math.sqrt(a **2+ b **2)}.')Didukung oleh
The hypotenuse of a triangle with base 3.0 and side 4.0 is 5.0.Didukung oleh
Ekspresi math.sqrt(a ** 2 + b ** 2) dievaluasi langsung di dalam string, sehingga tidak perlu menghitung nilainya secara terpisah sebelum menyisipkannya ke dalam string.
Menggunakan metode .format()
Seperti f-strings, metode .format() memungkinkan penyisipan variabel dan ekspresi ke dalam string. Sintaks dasar metode .format() adalah sebagai berikut.
name ='Mark'
output_string ='My name is {}.'.format(name)print(output_string)Didukung oleh
Kurung kurawal {} berfungsi sebagai placeholder, menandakan bahwa nilai sebuah variabel akan disisipkan ke string pada posisi tersebut. Nilai variabel spesifik yang disisipkan ke placeholder ditentukan oleh argumen yang diberikan ke metode .format().
Argumen posisional
Apa yang terjadi jika Anda memerlukan beberapa placeholder untuk beberapa variabel? Pertimbangkan kode berikut.
name ='Mark'
age =7# The placeholders are filled in order of the arguments
output_string ='My name is {} and I am {} years old.'.format(name, age)print(output_string)Didukung oleh
Dalam contoh ini, dibutuhkan dua variabel, name dan age. Akibatnya, string menyertakan dua placeholder, dan variabel disisipkan dalam urutan yang sama seperti kemunculannya di metode .format(). Argumen-argumen ini disebut *positional* arguments karena penempatannya di string ditentukan oleh posisinya dalam daftar argumen metode.
Placeholder berindeks dan bernama
Sebagai variasi dari konsep placeholder, perhatikan contoh ini.
name ='Mark'
age =7# Print age twice
output_string ='My name is {} and I am {} years old. My twin brother is also {} years old.'.format(name, age, age)print(output_string)Didukung oleh
My name is Mark and I am 7 years old. My twin brother is also 7 years old.Didukung oleh
Di sini, kita menggunakan kembali nilai variabel age dua kali. Menyertakan variabel yang sama berkali-kali seperti ini terasa canggung dan mengurangi keterbacaan. Adakah cara untuk menggunakan kembali variabel dalam string yang diformat dengan metode .format() tanpa mengulanginya? Ada, yaitu dengan *placeholder berindeks*.
name ='Mark'
age =7# Use indexed placeholders
output_string ='My name is {0} and I am {1} years old. My twin brother is also {1} years old.'.format(name, age)print(output_string)Didukung oleh
My name is Mark and I am 7 years old. My twin brother is also 7 years old.Didukung oleh
Dalam contoh ini, kita secara eksplisit mendefinisikan urutan variabel di dalam kurung kurawal, mengikuti indexing berbasis nol di Python. Selain itu, kita menggunakan kembali variabel pada indeks 1 alih-alih mengulanginya.
Sebagai alternatif dari pengindeksan posisional, Anda juga dapat menggunakan argumen bernama, di mana setiap argumen diberi nama.
print('My name is {name} and I am {age} years old.'.format(name='Mark', age=7))Didukung oleh
Argumen bernama dievaluasi di dalam kurung kurawal yang menyebutkan namanya. Akibatnya, placeholder {name} digantikan dengan nilai "Mark", dan placeholder {age} digantikan dengan 30.
Menggunakan operator %
Metode terakhir untuk interpolasi string adalah operator %. Fungsinya mirip dengan perintah printf() di C. Penggunaannya sudah usang dan sangat tidak dianjurkan, lebih baik menggunakan f-strings atau metode .format(). Metode ini disebutkan di sini karena Anda mungkin menemukannya dalam basis kode warisan.
Format dasar operator % adalah: "format string" % values. String format berisi placeholder, seperti %s untuk string, yang akan digantikan oleh nilai. Misalnya, contoh berikut mencetak "Hello, Mark."
Specifier format umum lainnya ditunjukkan pada tabel berikut.
Specifier
Arti
Contoh
%s
String
"Hello %s" % "Alice" → "Hello Alice"
%d
Integer (Desimal)
"Age: %d" % 25 → "Age: 25"
%f
Float (Bawaan 6 desimal)
"Pi: %f" % 3.14159 → "Pi: 3.141590"
%.nf
Float (n angka desimal)
"%.2f" % 3.14159 → "3.14"
%x
Heksadesimal (huruf kecil)
"%x" % 255 → "ff"
%X
Heksadesimal (huruf besar)
"%X" % 255 → "FF"
%o
Oktal
"%o" % 255 → "377"
Operator % memiliki banyak keterbatasan. Salah satunya, ia kurang mudah dibaca dibandingkan f-strings. Perhatikan kode berikut.
name ="Alice"
age =30
height =5.6# The % operator is hard to scan
message ="My name is %s, I am %d years old, and my height is %.1f feet."%(name, age, height)print(message)Didukung oleh
My name is Alice, I am 30 years old, and my height is 5.6 feet.Didukung oleh
Apakah kode ini jelas sekilas? Mungkin tidak. Ada banyak pemindaian visual bolak-balik dari placeholder ke variabel yang mengisinya. Mudah membuat bingung (atau pusing) dengan semua pemindaian bolak-balik tersebut.
Sekarang, perhatikan kode ekuivalen yang menggunakan f-strings.
# This is much cleaner
message =f"My name is {name}, I am {age} years old, and my height is {height:.1f} feet."print(message)Didukung oleh
My name is Alice, I am 30 years old, and my height is 5.6 feet.Didukung oleh
Tidak diperlukan pemindaian dan tidak ada string format yang membingungkan. Kodenya bersih, mudah dipahami, dan mudah ditulis. Anda dapat mempelajari kiat lainnya untuk menulis kode yang jelas dan teroptimasi melalui Python Programming skill track DataCamp.
Teknik Interpolasi String Python Lanjutan
Setelah memahami dasar-dasarnya, mari kita lihat beberapa penggunaan lanjutan dari interpolasi string Python.
Interpolasi string multiline di Python
f-strings juga dapat digunakan untuk konten multiline dengan menggunakan penanda f bersama tanda kutip tiga (tunggal atau ganda). Teks dapat ditulis di beberapa baris, dan akan muncul pada keluaran persis sebagaimana diformat.
name ='Mark'
profession ='Astronaut'
age =7# This is an example of a multiline string
bio =f"""
Name: {name}
Profession: {profession}
Age: {age}
"""print(bio)Didukung oleh
Name: Mark
Profession: Astronaut
Age: 7Didukung oleh
String multiline juga dapat dibuat menggunakan metode .format().
name ='Mark'
profession ='Astronaut'
age =7# This is a multiline string with .format()
bio ="""
Name: {}
Profession: {}
Age: {}
""".format(name, profession, age)print(bio)Didukung oleh
Name: Mark
Profession: Astronaut
Age: 7Didukung oleh
Kasus penggunaan interpolasi string multiline
Mengapa Anda ingin menggunakan interpolasi string multiline? Ada banyak penggunaan untuk interpolasi string multiline. Berikut beberapa kasus penggunaannya:
Menghasilkan email atau pesan multiline
Logging dan debugging
Menghasilkan kueri SQL secara dinamis
Menghasilkan email atau pesan multiline
Misalkan Anda mengirimkan surat undangan massal kepada banyak undangan untuk sebuah konferensi teknologi.
name ="Alice"
event ="Annual Tech Conference"
date ="March 15, 2025"
email ="""Dear {name},
We are pleased to invite you to the {event} taking place on {date}.
We hope you can join us for an exciting experience.
Best regards,
The Event Team""".format(name=name, event=event, date=date)print(email)Didukung oleh
Dear Alice,
We are pleased to invite you to the Annual Tech Conference taking place on March 15, 2025.
We hope you can join us for an exciting experience.
Best regards,
The Event TeamDidukung oleh
Dengan f-strings, membuat surat template menjadi sederhana dan efisien. Untuk mengubah nama, acara, atau tanggal, cukup ubah di variabelnya dan string akan berubah secara otomatis.
Logging dan debugging
String multiline berguna untuk mencetak pesan galat ke log.
error_code =404
url ='/missing-page'
timestamp ='2025-02-05 12:30:00'
error_message ='The requested page could not be found.'
log_message =f"""[ERROR {error_code}]
Time: {timestamp}
URL: {url}{error_message}"""print(log_message)Didukung oleh
[ERROR 404]
Time: 2025-02-05 12:30:00
URL: /missing-page
The requested page could not be found.Didukung oleh
Metode ini menjaga pesan log tetap terstruktur dan mempermudah debugging dengan log yang diformat dengan baik.
Menghasilkan kueri SQL secara dinamis
Kueri SQL dapat dibangun secara dinamis menggunakan string multiline.
table ='users'
column ='email'
value ='[email protected]'
query =f"""SELECT *
FROM {table}
WHERE {column} = '{value}';"""print(query)Didukung oleh
Metode ini membuat kueri SQL mudah dibaca dan mempertahankan indentasi. Selain itu, ini menghilangkan kebutuhan menggunakan + untuk penggabungan string.
Kasus penggunaan lainnya meliputi:
Menulis kontrak terformat
Membuat dokumen Markdown atau $\LaTeX$
Template HTML/XML multiline
Menghasilkan respons API atau teks mirip JSON
Keunggulan interpolasi string multiline
Seperti yang kita lihat, ada beberapa keunggulan interpolasi string multiline.
Interpolasi string mempertahankan pemformatan tanpa perlu karakter escape \n.
Interpolasi string meningkatkan keterbacaan dibandingkan pemformatan satu baris.
Interpolasi string mengurangi kekacauan saat bekerja dengan teks terstruktur (misalnya, log, kueri, laporan).
Interpolasi string memungkinkan pembuatan teks dinamis tanpa merusak indentasi.
Memformat angka dan nilai khusus
Untuk mengendalikan jumlah tempat desimal yang ditampilkan menggunakan f-string, gunakan sintaks: f'{value:.nf}', di mana value adalah angka pecahan (floating-point), n adalah jumlah tempat desimal, dan f (yang setelah .) menandakan pemformatan float.
Sebagai ilustrasi, kode berikut menampilkan $\pi$ dengan jumlah desimal yang berbeda.
pi =3.1415926535print(f'Pi rounded to 2 decimal places: {pi:.2f}')print(f'Pi rounded to 4 decimal places: {pi:.4f}')print(f'Pi rounded to 0 decimal places: {pi:.0f}')Didukung oleh
Pi rounded to 2 decimal places: 3.14
Pi rounded to 4 decimal places: 3.1416
Pi rounded to 0 decimal places: 3Didukung oleh
Pemformatan dengan metode .format() serupa.
print('Pi rounded to 2 decimal places: {:.2f}'.format(pi))print('Pi rounded to 4 decimal places: {:.4f}'.format(pi))print('Pi rounded to 0 decimal places: {:.0f}'.format(pi))Didukung oleh
Pi rounded to 2 decimal places:3.14
Pi rounded to 4 decimal places:3.1416
Pi rounded to 0 decimal places:3Didukung oleh
Anda dapat menggunakan f-string untuk memformat persentase dengan menggunakan sintaks :.nf yang dikombinasikan dengan %, di mana n adalah jumlah tempat desimal.
score =0.875print(f"Success rate: {score:.2%}")Didukung oleh
Anda dapat menggunakan f-string untuk memformat mata uang dengan menggunakan :, untuk pemisah ribuan dan .nf untuk mengendalikan jumlah desimal. Anda juga dapat menyertakan simbol mata uang seperti $, €, atau £ langsung di dalam string.
amount =98765.4321print(f"USD: ${amount:,.2f}")print(f"EUR: €{amount:,.2f}")print(f"GBP: £{amount:,.2f}")Didukung oleh
USD: $98,765.43
EUR: €98,765.43
GBP: £98,765.43Didukung oleh
Menggunakan f-strings dengan dictionary dan list
Untuk menggunakan f-strings dengan dictionary di Python, akses nilai dictionary di dalam kurung kurawal menggunakan notasi kurung siku (dict['key']) atau dengan membongkar (unpack) dictionary menggunakan **.
person ={'name':'Alice','age':30,'city':'New York'}print(f"My name is {person['name']}, I am {person['age']} years old, and I live in {person['city']}.")Didukung oleh
My name is Alice, I am 30 years old, and I live in New York.Didukung oleh
Alih-alih mengakses setiap key secara manual, Anda dapat membongkar dictionary ke dalam f-string seperti berikut.
person ={'name':'Alice','age':30,}print(f'My name is {name} and I am {age} years old.'.format(**person))Didukung oleh
Kelebihan dan Kekurangan Metode Interpolasi String
Seperti yang telah kita lihat, f-strings dan metode .format() sama-sama berguna untuk interpolasi string. Mari kita bandingkan kelebihan dan kekurangan masing-masing metode.
Fitur
f-strings
.format()
% formatting
Keterbacaan
🟢 Terbaik
🟡 Oke
🔴 Lebih sulit
Performa
🟢 Paling cepat
🟡 Lebih lambat
🔴 Paling lambat
Mendukung Ekspresi
🟢 Ya
🟡 Tidak langsung
🔴 Tidak
Dukungan multiline
🟢 Ya
🟢 Ya
🔴 Tidak
Kemudahan Penggunaan
🟢 Paling mudah
🟡 Sedang
🔴 Sulit
Debugging (= Operator)
🟢 Ya (Python 3.8+)
🔴 Tidak
🔴 Tidak
Kapan sebaiknya Anda menggunakan .format() alih-alih f-strings?
Keunggulan
Alasan menggunakan .format()
Dukungan Python Lawas
Berjalan di Python 2.7+
Pengurutan Fleksibel
Memungkinkan pengurutan ulang placeholder dengan mudah
Pemformatan Dinamis
Bekerja saat spesifier format bersifat dinamis
Menangani Kurung {} Lebih Baik
Menghindari escape manual tambahan
Bekerja Baik dengan Dictionary
Lebih mudah menggunakan key dict
Kesalahan Umum dan Praktik Terbaik
Di bawah ini, Anda dapat menemukan beberapa metode pemecahan masalah dan kiat utama untuk menggunakan interpolasi string Python.
Menghindari kesalahan sintaks dengan kurung kurawal
Ada banyak kesalahan sintaks yang bisa terjadi saat menggunakan interpolasi string yang melibatkan kurung kurawal.
Cell In[96], line 1print('Hello, my name is {name!'}^
SyntaxError: closing parenthesis '}' does notmatch opening parenthesis '('Didukung oleh
Untungnya, galatnya jelas dan perbaikannya mudah.
Gunakan {{ dan }} untuk menampilkan { } literal
Apa yang terjadi jika Anda ingin mencetak kurung kurawal di dalam string yang diinterpolasi? Apa pun di dalam kurung kurawal akan (berusaha) dievaluasi.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[101], line 1---->1print(f'Set notation: {a, b, c}')
NameError: name 'c'isnot definedDidukung oleh
Python menafsirkan a, b, c di dalam kurung kurawal sebagai tuple, dan berusaha menemukan nilai yang terkait dengan a. Karena tidak ada variabel tersebut, Python memunculkan KeyError. Perbaikannya adalah menggunakan kurung kurawal ganda {{}}.
import timeit
name ="Alice"
age =30
pi =3.1415926535# Measure f-string performance
f_string_time = timeit.timeit('f"My name is {name} and I am {age} years old."',globals=globals(), number=1000000)# Measure .format() performance
format_time = timeit.timeit('"My name is {} and I am {} years old.".format(name, age)',globals=globals(), number=1000000)# Measure f-string performance with expressions
f_string_expr_time = timeit.timeit('f"Pi rounded to 2 decimal places: {pi:.2f}"',globals=globals(), number=1000000)# Measure .format() performance with expressions
format_expr_time = timeit.timeit('"Pi rounded to 2 decimal places: {:.2f}".format(pi)',globals=globals(), number=1000000)# Print resultsprint(f"f-string (simple): {f_string_time:.6f} seconds")print(f".format() (simple): {format_time:.6f} seconds")print(f"f-string (with expression): {f_string_expr_time:.6f} seconds")print(f".format() (with expression): {format_expr_time:.6f} seconds")Didukung oleh
Seperti yang Anda lihat, dari sisi efisiensi, sebaiknya memilih f-strings dibandingkan .format().
Praktik terbaik untuk interpolasi string yang bersih dan mudah dibaca
Agar pemformatan string Anda jelas, efisien, dan mudah dipelihara, ikuti praktik terbaik berikut saat menggunakan string terinterpolasi.
Utamakan f-strings untuk keterbacaan (Python 3.6+)
# Recommended
name ="Alice"
age =30print(f"My name is {name} and I am {age} years old.")# Not Recommended (Less readable)print("My name is {} and I am {} years old.".format(name, age))# Avoid using % formatting (Outdated)print("My name is %s and I am %d years old."%(name, age))Didukung oleh
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.Didukung oleh
Gunakan placeholder bernama untuk kejelasan
# Named placeholders (readable)
user ={"name":"Alice","age":30}print(f"My name is {user['name']} and I am {user['age']} years old.")# Using indexes in .format() (not as readable)print("My name is {0} and I am {1} years old.".format("Alice",30))Didukung oleh
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.Didukung oleh
Jaga string multiline tetap mudah dibaca.
name ="Alice"
age =30
message =f"""Hello, {name}!
We are happy to invite you to our event.
At {age} years old, you are eligible for the VIP pass.
Best regards,
Event Team
"""print(message)Didukung oleh
Hello, Alice!
We are happy to invite you to our event.
At 30 years old, you are eligible for the VIP pass.
Best regards,
Event Team Didukung oleh
Gunakan f-strings dalam logging untuk debugging yang lebih baik
Python 3.8 dan yang lebih baru mendukung = untuk debugging di f-strings.
value = 42
# Output: value = 42
print(f"{value = }") Didukung oleh
Interpolasi string adalah fitur kuat di Python yang membuat pemformatan string lebih bersih, lebih mudah dibaca, dan lebih efisien. Di antara metode yang tersedia, f-strings adalah pendekatan yang paling modern dan direkomendasikan, dengan performa, kejelasan, dan fleksibilitas yang lebih baik dibandingkan metode lama seperti .format() dan % formatting.
Dengan mengikuti praktik terbaik, seperti menggunakan placeholder bernama, mengendalikan presisi desimal, merapikan teks demi keterbacaan, serta menangani key dictionary yang hilang dengan baik, Anda dapat menulis pemformatan string di Python yang bersih, profesional, dan mudah dipelihara.
Baik Anda membuat laporan terformat, pesan multiline, atau keluaran data terstruktur, f-strings menyediakan cara yang sederhana namun kuat untuk mengintegrasikan variabel dan ekspresi secara mulus. Mengadopsi f-strings tidak hanya akan meningkatkan kualitas kode Anda tetapi juga efisiensinya.
Untuk informasi lebih lanjut tentang interpolasi string Python, lihat sumber daya DataCamp berikut:
Interpolasi string adalah proses menyisipkan variabel, ekspresi, atau keluaran fungsi langsung ke dalam string. Python mendukungnya menggunakan f-strings, .format(), dan pemformatan %.
Apakah f-strings tersedia di semua versi Python?⌄
Tidak, f-strings diperkenalkan di Python 3.6. Jika Anda menggunakan versi yang lebih lama, Anda perlu menggunakan .format() atau pemformatan %.
Mengapa f-strings lebih disukai daripada .format() dan pemformatan %?⌄
f-strings lebih cepat, lebih mudah dibaca, dan lebih ringkas daripada .format() dan pemformatan %. f-strings memungkinkan penyematan variabel secara langsung dan ekspresi inline, sehingga lebih efisien.
Bisakah saya menggunakan f-strings dengan dictionary?⌄
Ya, Anda dapat mengakses nilai dictionary di dalam f-strings:
user ={"name":"Alice","age":30}print(f"My name is {user['name']} and I am {user['age']} years old.")Didukung oleh
Sebagai alternatif, bongkar dictionary:
print(f"My name is {name} and I am {age}.".format(**user))Didukung oleh
Bagaimana cara memformat angka menggunakan f-strings?⌄
Anda dapat mengendalikan jumlah desimal dan menambahkan pemisah ribuan menggunakan spesifier format:
Mark Pedigo, PhD, adalah seorang data scientist terkemuka dengan keahlian dalam data science kesehatan, pemrograman, dan pendidikan. Dengan gelar PhD di bidang Matematika, B.S. di bidang Ilmu Komputer, serta Sertifikat Profesional di bidang AI, Mark memadukan pengetahuan teknis dengan pemecahan masalah praktis. Kariernya mencakup peran dalam deteksi kecurangan, prediksi kematian bayi, dan peramalan keuangan, serta kontribusi pada perangkat lunak estimasi biaya NASA. Sebagai pendidik, ia telah mengajar di DataCamp dan Washington University in St. Louis serta membimbing programmer junior. Di waktu luang, Mark menikmati alam Minnesota bersama istrinya, Mandy, dan anjingnya, Harley, serta bermain piano jazz.
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.
Kembangkan keterampilan data Anda, pelajari cara mengolah dan memvisualisasikan data, serta terapkan analisis canggih untuk mengambil keputusan berbasis data.
Kembangkan keterampilan pemrograman Python Anda. Pelajari cara bekerja dengan modul dan paket, bekerja dengan tipe data bawaan, dan menulis fungsi kustom.
Misalkan Anda ingin menampilkan nama dan profesi seseorang. Anda bisa menulis program sederhana seperti berikut.
Pendekatan tersebut kurang ringkas dan kurang mudah dibaca. Untungnya, interpolasi string menawarkan solusi yang lebih baik. Teknik ini memungkinkan variabel, ekspresi, atau keluaran fungsi disisipkan langsung ke dalam string, sehingga manipulasi string menjadi dinamis dan menghilangkan kebutuhan penggabungan manual.
Dengan pendekatan interpolasi string, kita dapat menulis ulang kode sebagai berikut.
Versi dengan interpolasi string memungkinkan penyematan ekspresi langsung di dalam string tanpa menggunakan penggabungan yang berantakan. Seperti yang Anda lihat, ini jauh lebih bersih.
Interpolasi String Dasar di Python
Ada beberapa teknik interpolasi string yang tersedia di Python. Metode yang paling umum direkomendasikan adalah formatted string literals, atau f-strings, yang tersedia sejak Python 3.6.
Metode lain yang umum ditemui pada kode yang lebih lama dari Python 3.6 adalah metode
.format(). Meskipun metode ini lebih panjang daripada f-strings, sesekali ia memiliki keunggulan tersendiri (rincian di bawah).Terakhir, Anda mungkin menemui pemformatan bergaya
%pada kode warisan (legacy).Menggunakan f-strings (Python 3.6+)
f-strings (formatted string literal) adalah cara yang kuat dan ringkas untuk memformat string di Python. Diperkenalkan pada Python 3.6, ia menyediakan cara yang mudah dibaca dan efisien untuk menyisipkan variabel, ekspresi, dan pemanggilan fungsi langsung ke dalam string.
Contoh sederhana sintaks dasar f-string adalah sebagai berikut.
Dalam kode ini, variabel
output_stringdiberi f-string. Awalanfsebelum tanda kutip pembuka menunjukkan bahwa string mendukung ekspresi yang disematkan. Variabelnamedievaluasi dan nilainya disisipkan ke dalam string, menghasilkan keluaran:"My name is Mark."Tidak hanya nilai variabel, perhitungan atau ekspresi pun dapat disisipkan ke dalam f-strings. Perhatikan contoh ini.
Ekspresi
math.sqrt(a ** 2 + b ** 2)dievaluasi langsung di dalam string, sehingga tidak perlu menghitung nilainya secara terpisah sebelum menyisipkannya ke dalam string.Menggunakan metode .format()
Seperti f-strings, metode
.format()memungkinkan penyisipan variabel dan ekspresi ke dalam string. Sintaks dasar metode.format()adalah sebagai berikut.Kurung kurawal
{}berfungsi sebagai placeholder, menandakan bahwa nilai sebuah variabel akan disisipkan ke string pada posisi tersebut. Nilai variabel spesifik yang disisipkan ke placeholder ditentukan oleh argumen yang diberikan ke metode.format().Argumen posisional
Apa yang terjadi jika Anda memerlukan beberapa placeholder untuk beberapa variabel? Pertimbangkan kode berikut.
Dalam contoh ini, dibutuhkan dua variabel,
namedanage. Akibatnya, string menyertakan dua placeholder, dan variabel disisipkan dalam urutan yang sama seperti kemunculannya di metode.format(). Argumen-argumen ini disebut *positional* arguments karena penempatannya di string ditentukan oleh posisinya dalam daftar argumen metode.Placeholder berindeks dan bernama
Sebagai variasi dari konsep placeholder, perhatikan contoh ini.
Di sini, kita menggunakan kembali nilai variabel
agedua kali. Menyertakan variabel yang sama berkali-kali seperti ini terasa canggung dan mengurangi keterbacaan. Adakah cara untuk menggunakan kembali variabel dalam string yang diformat dengan metode.format()tanpa mengulanginya? Ada, yaitu dengan *placeholder berindeks*.Dalam contoh ini, kita secara eksplisit mendefinisikan urutan variabel di dalam kurung kurawal, mengikuti indexing berbasis nol di Python. Selain itu, kita menggunakan kembali variabel pada indeks 1 alih-alih mengulanginya.
Sebagai alternatif dari pengindeksan posisional, Anda juga dapat menggunakan argumen bernama, di mana setiap argumen diberi nama.
Argumen bernama dievaluasi di dalam kurung kurawal yang menyebutkan namanya. Akibatnya, placeholder
{name}digantikan dengan nilai"Mark", dan placeholder{age}digantikan dengan30.Menggunakan operator %
Metode terakhir untuk interpolasi string adalah operator
%. Fungsinya mirip dengan perintahprintf()di C. Penggunaannya sudah usang dan sangat tidak dianjurkan, lebih baik menggunakan f-strings atau metode.format(). Metode ini disebutkan di sini karena Anda mungkin menemukannya dalam basis kode warisan.Format dasar operator
%adalah:"format string" % values. String format berisi placeholder, seperti%suntuk string, yang akan digantikan oleh nilai. Misalnya, contoh berikut mencetak "Hello, Mark."Specifier format umum lainnya ditunjukkan pada tabel berikut.
Specifier
Arti
Contoh
%s
String
"Hello %s" % "Alice" → "Hello Alice"
%d
Integer (Desimal)
"Age: %d" % 25 → "Age: 25"
%f
Float (Bawaan 6 desimal)
"Pi: %f" % 3.14159 → "Pi: 3.141590"
%.nf
Float (n angka desimal)
"%.2f" % 3.14159 → "3.14"
%x
Heksadesimal (huruf kecil)
"%x" % 255 → "ff"
%X
Heksadesimal (huruf besar)
"%X" % 255 → "FF"
%o
Oktal
"%o" % 255 → "377"
Operator % memiliki banyak keterbatasan. Salah satunya, ia kurang mudah dibaca dibandingkan f-strings. Perhatikan kode berikut.
Apakah kode ini jelas sekilas? Mungkin tidak. Ada banyak pemindaian visual bolak-balik dari placeholder ke variabel yang mengisinya. Mudah membuat bingung (atau pusing) dengan semua pemindaian bolak-balik tersebut.
Sekarang, perhatikan kode ekuivalen yang menggunakan f-strings.
Tidak diperlukan pemindaian dan tidak ada string format yang membingungkan. Kodenya bersih, mudah dipahami, dan mudah ditulis. Anda dapat mempelajari kiat lainnya untuk menulis kode yang jelas dan teroptimasi melalui Python Programming skill track DataCamp.
Teknik Interpolasi String Python Lanjutan
Setelah memahami dasar-dasarnya, mari kita lihat beberapa penggunaan lanjutan dari interpolasi string Python.
Interpolasi string multiline di Python
f-strings juga dapat digunakan untuk konten multiline dengan menggunakan penanda f bersama tanda kutip tiga (tunggal atau ganda). Teks dapat ditulis di beberapa baris, dan akan muncul pada keluaran persis sebagaimana diformat.
String multiline juga dapat dibuat menggunakan metode
.format().Kasus penggunaan interpolasi string multiline
Mengapa Anda ingin menggunakan interpolasi string multiline? Ada banyak penggunaan untuk interpolasi string multiline. Berikut beberapa kasus penggunaannya:
Menghasilkan email atau pesan multiline
Misalkan Anda mengirimkan surat undangan massal kepada banyak undangan untuk sebuah konferensi teknologi.
Dengan f-strings, membuat surat template menjadi sederhana dan efisien. Untuk mengubah nama, acara, atau tanggal, cukup ubah di variabelnya dan string akan berubah secara otomatis.
Logging dan debugging
String multiline berguna untuk mencetak pesan galat ke log.
Metode ini menjaga pesan log tetap terstruktur dan mempermudah debugging dengan log yang diformat dengan baik.
Menghasilkan kueri SQL secara dinamis
Kueri SQL dapat dibangun secara dinamis menggunakan string multiline.
Metode ini membuat kueri SQL mudah dibaca dan mempertahankan indentasi. Selain itu, ini menghilangkan kebutuhan menggunakan
+untuk penggabungan string.Kasus penggunaan lainnya meliputi:
Keunggulan interpolasi string multiline
Seperti yang kita lihat, ada beberapa keunggulan interpolasi string multiline.
\n.Memformat angka dan nilai khusus
Untuk mengendalikan jumlah tempat desimal yang ditampilkan menggunakan f-string, gunakan sintaks:
f'{value:.nf}', di manavalueadalah angka pecahan (floating-point),nadalah jumlah tempat desimal, danf(yang setelah.) menandakan pemformatan float.Sebagai ilustrasi, kode berikut menampilkan $\pi$ dengan jumlah desimal yang berbeda.
Pemformatan dengan metode
.format()serupa.Anda dapat menggunakan f-string untuk memformat persentase dengan menggunakan sintaks
:.nfyang dikombinasikan dengan%, di mananadalah jumlah tempat desimal.Anda dapat menggunakan f-string untuk memformat mata uang dengan menggunakan
:,untuk pemisah ribuan dan.nfuntuk mengendalikan jumlah desimal. Anda juga dapat menyertakan simbol mata uang seperti $, €, atau £ langsung di dalam string.Menggunakan f-strings dengan dictionary dan list
Untuk menggunakan f-strings dengan dictionary di Python, akses nilai dictionary di dalam kurung kurawal menggunakan notasi kurung siku (dict['key']) atau dengan membongkar (unpack) dictionary menggunakan **.
Alih-alih mengakses setiap key secara manual, Anda dapat membongkar dictionary ke dalam f-string seperti berikut.
Untuk menghindari galat karena key yang hilang, gunakan
get()saat mengakses dictionary.Kelebihan dan Kekurangan Metode Interpolasi String
Seperti yang telah kita lihat, f-strings dan metode
.format()sama-sama berguna untuk interpolasi string. Mari kita bandingkan kelebihan dan kekurangan masing-masing metode.Fitur
f-strings
.format()
% formatting
Keterbacaan
🟢 Terbaik
🟡 Oke
🔴 Lebih sulit
Performa
🟢 Paling cepat
🟡 Lebih lambat
🔴 Paling lambat
Mendukung Ekspresi
🟢 Ya
🟡 Tidak langsung
🔴 Tidak
Dukungan multiline
🟢 Ya
🟢 Ya
🔴 Tidak
Kemudahan Penggunaan
🟢 Paling mudah
🟡 Sedang
🔴 Sulit
Debugging (= Operator)
🟢 Ya (Python 3.8+)
🔴 Tidak
🔴 Tidak
Kapan sebaiknya Anda menggunakan
.format()alih-alih f-strings?Keunggulan
Alasan menggunakan .format()
Dukungan Python Lawas
Berjalan di Python 2.7+
Pengurutan Fleksibel
Memungkinkan pengurutan ulang placeholder dengan mudah
Pemformatan Dinamis
Bekerja saat spesifier format bersifat dinamis
Menangani Kurung {} Lebih Baik
Menghindari escape manual tambahan
Bekerja Baik dengan Dictionary
Lebih mudah menggunakan key dict
Kesalahan Umum dan Praktik Terbaik
Di bawah ini, Anda dapat menemukan beberapa metode pemecahan masalah dan kiat utama untuk menggunakan interpolasi string Python.
Menghindari kesalahan sintaks dengan kurung kurawal
Ada banyak kesalahan sintaks yang bisa terjadi saat menggunakan interpolasi string yang melibatkan kurung kurawal.
Untungnya, galatnya jelas dan perbaikannya mudah.
Apa yang terjadi jika Anda ingin mencetak kurung kurawal di dalam string yang diinterpolasi? Apa pun di dalam kurung kurawal akan (berusaha) dievaluasi.
Python menafsirkan a, b, c di dalam kurung kurawal sebagai tuple, dan berusaha menemukan nilai yang terkait dengan a. Karena tidak ada variabel tersebut, Python memunculkan KeyError. Perbaikannya adalah menggunakan kurung kurawal ganda
{{}}.Set notation: {{a, b, c}}
Perbandingan performa: f-strings vs .format()
Mari bandingkan performa f-strings dan
.format().Seperti yang Anda lihat, dari sisi efisiensi, sebaiknya memilih f-strings dibandingkan
.format().Praktik terbaik untuk interpolasi string yang bersih dan mudah dibaca
Agar pemformatan string Anda jelas, efisien, dan mudah dipelihara, ikuti praktik terbaik berikut saat menggunakan string terinterpolasi.
Python 3.8 dan yang lebih baru mendukung
=untuk debugging di f-strings.Kesimpulan
Interpolasi string adalah fitur kuat di Python yang membuat pemformatan string lebih bersih, lebih mudah dibaca, dan lebih efisien. Di antara metode yang tersedia, f-strings adalah pendekatan yang paling modern dan direkomendasikan, dengan performa, kejelasan, dan fleksibilitas yang lebih baik dibandingkan metode lama seperti
.format()dan%formatting.Dengan mengikuti praktik terbaik, seperti menggunakan placeholder bernama, mengendalikan presisi desimal, merapikan teks demi keterbacaan, serta menangani key dictionary yang hilang dengan baik, Anda dapat menulis pemformatan string di Python yang bersih, profesional, dan mudah dipelihara.
Baik Anda membuat laporan terformat, pesan multiline, atau keluaran data terstruktur, f-strings menyediakan cara yang sederhana namun kuat untuk mengintegrasikan variabel dan ekspresi secara mulus. Mengadopsi f-strings tidak hanya akan meningkatkan kualitas kode Anda tetapi juga efisiensinya.
Untuk informasi lebih lanjut tentang interpolasi string Python, lihat sumber daya DataCamp berikut: