Lewati ke konten utama

Peran Underscore (_) dalam Tutorial Python

Dalam tutorial ini, Anda akan mempelajari penggunaan underscore (_) di Python.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Jalankan dan edit kode dari Tutorial ini secara online

Jalankan kode

Banyak Pengembang Python tidak mengetahui fungsionalitas underscore (_) di Python. Ini membantu pengguna menulis kode Python secara produktif.

Underscore (_) adalah karakter yang unik di Python.

Jika Anda seorang programmer Python, Anda mungkin sudah akrab dengan sintaks berikut:

  • for _ in range(100)

  • __init__(self)

  • _ = 2

Ini memiliki beberapa makna khusus dalam kondisi yang berbeda. Mari kita lihat semuanya.

Anda akan menemukan maksimal enam penggunaan berbeda dari underscore (_). Jika mau, Anda dapat menggunakannya untuk berbagai tujuan setelah Anda memahami underscore (_).

1. Penggunaan di Interpreter

Python secara otomatis menyimpan nilai ekspresi terakhir di interpreter ke variabel khusus bernama "_". Anda juga dapat menetapkan nilai ini ke variabel lain jika diinginkan.

Anda dapat menggunakannya sebagai variabel biasa. Lihat contohnya

>>> 5 + 4
9
>>> _     # stores the result of the above expression
9
>>> _ + 6
15
>>> _
15
>>> a = _  # assigning the value of _ to another variable
>>> a
15

2. Mengabaikan Nilai

Underscore (_) juga digunakan untuk mengabaikan nilai. Jika Anda tidak ingin menggunakan nilai tertentu saat unpacking, cukup tetapkan nilai tersebut ke underscore (_).

Mengabaikan berarti menetapkan nilai ke variabel khusus underscore (_). Kita menetapkan nilai ke underscore (_) dengan maksud tidak menggunakannya dalam kode selanjutnya.

Lihat contohnya

## ignoring a value
a, _, b = (1, 2, 3) # a = 1, b = 3
print(a, b)

## ignoring multiple values
## *(variable) used to assign multiple value to a variable as list while unpacking
## it's called "Extended Unpacking", only available in Python 3.x
a, *_, b = (7, 6, 5, 4, 3, 2, 1)
print(a, b)
1 3
7 1

3. Penggunaan dalam Loop

Anda dapat menggunakan underscore (_) sebagai variabel dalam looping. Lihat contoh di bawah untuk mendapatkan gambaran.

## lopping ten times using _
for _ in range(5):
    print(_)

## iterating over a list using _
## you can use _ same as a variable
languages = ["Python", "JS", "PHP", "Java"]
for _ in languages:
    print(_)

_ = 5
while _ < 10:
    print(_, end = ' ') # default value of 'end' id '\n' in python. we're changing it to space
    _ += 1
0
1
2
3
4
Python
JS
PHP
Java
5 6 7 8 9

4. Memisahkan Digit Angka

Jika Anda memiliki angka dengan digit panjang, Anda dapat memisahkan kelompok digit sesuai keinginan untuk memudahkan pemahaman.

Contoh: million = 1_000_000

Selanjutnya, Anda juga dapat menggunakan underscore (_) untuk memisahkan bagian biner, oktal, atau heksadesimal dari angka.

Contoh: binary = 0b_0010, octa = 0o_64, hexa = 0x_23_ab

Jalankan semua contoh di atas untuk melihat hasilnya.

## different number systems
## you can also check whether they are correct or not by coverting them into integer using "int" method
million = 1_000_000
binary = 0b_0010
octa = 0o_64
hexa = 0x_23_ab

print(million)
print(binary)
print(octa)
print(hexa)
1000000
2
52
9131

5. Penamaan Menggunakan Underscore (_)

Underscore (_) dapat digunakan untuk menamai variabel, fungsi, dan kelas, dll.

  • Single Pre Underscore: _variable
  • Single Post Underscore: variable_
  • Double Pre Underscores: __variable
  • Double Pre dan Post Underscores: __variable__

5.1. _single_pre_underscore

_name

Single Pre Underscore digunakan untuk penggunaan internal. Kebanyakan dari kita tidak menggunakannya karena alasan tersebut.

Lihat contoh berikut.

class Test:

    def __init__(self):
        self.name = "datacamp"
        self._num = 7

obj = Test()
print(obj.name)
print(obj._num)
datacamp
7

Single pre underscore tidak mencegah Anda mengakses variabel single pre underscore.

Namun, single pre underscore memengaruhi nama-nama yang diimpor dari modul.

Marilah menulis kode berikut di berkas my_funtions.

## filename:- my_functions.py

def func():
    return "datacamp"

def _private_func():
    return 7

Sekarang, jika Anda mengimpor semua metode dan nama dari my_functions.py, Python tidak mengimpor nama yang dimulai dengan single pre underscore.

>>> from my_functions import *
>>> func()
'datacamp'
>>> _private_func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_private_func' is not defined

Anda menghindari error di atas dengan mengimpor modul secara normal.

>>> import my_functions
>>> my_functions.func()
'datacamp'
>>> my_functions._private_func()
7

Single Pre Underscore hanya dimaksudkan untuk penggunaan internal.

5.2 single_postunderscore

name_

Terkadang jika Anda ingin menggunakan Keyword Python sebagai nama variabel, fungsi, atau kelas, Anda dapat menggunakan konvensi ini.

Anda dapat menghindari konflik dengan Keyword Python dengan menambahkan underscore di akhir nama yang ingin Anda gunakan.

Mari kita lihat contohnya.

>>> def function(class):
  File "<stdin>", line 1
    def function(class):
                 ^
SyntaxError: invalid syntax
>>> def function(class_):
...     pass
...
>>>

Single Post Underscore digunakan untuk menamai variabel Anda sebagai Keyword Python dan menghindari benturan dengan menambahkan underscore di akhir nama variabel.

5.3. Double Pre Underscore

__name

Double Pre Underscores digunakan untuk name mangling.

Double Pre Underscores memberi tahu interpreter Python untuk menulis ulang nama atribut dari subclass guna menghindari konflik penamaan.

  • Name Mangling: interpreter Python mengubah nama variabel sedemikian rupa sehingga sulit berbenturan saat kelas diturunkan.

Mari kita lihat contoh.

class Sample():

    def __init__(self):
        self.a = 1
        self._b = 2
        self.__c = 3
obj1 = Sample()
dir(obj1)
['_Sample__c',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 '_b',
 'a']

Kode di atas mengembalikan semua atribut dari objek class. Mari kita lihat variabel kita dalam daftar atribut.

Variabel self.a muncul dalam daftar tanpa perubahan.

Variabel self._b juga muncul dalam daftar tanpa perubahan. Seperti yang dibahas di atas, ini hanya untuk penggunaan internal.

  • Apakah ada variabel self.__c dalam daftar?

    • Jika Anda memperhatikan daftar atribut dengan saksama, Anda akan menemukan atribut bernama _Sample__c. Inilah yang disebut name mangling. Ini untuk menghindari penimpaan variabel di subclass.

Mari kita buat class lain dengan mewarisi class Sample untuk melihat bagaimana overriding bekerja.

class SecondClass(Sample):

    def __init__(self):
        super().__init__()
        self.a = "overridden"
        self._b = "overridden"
        self.__c = "overridden"
obj2 = SecondClass()
print(obj2.a)
print(obj2._b)
print(obj2.__c)
overridden
overridden



---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-2-4bf6884fbd34> in <module>()
      9 print(obj2.a)
     10 print(obj2._b)
---> 11 print(obj2.__c)


AttributeError: 'SecondClass' object has no attribute '__c'

Di sini, name mangling bekerja lagi. Ia mengubah obj2.__c menjadi _SecondClass__c. Sekarang, print elemen tersebut menggunakan Attribute yang telah dimodifikasi.

print(obj2._SecondClass__c)
overridden

Lihat, itu berhasil. Anda juga dapat mengakses variabel yang dibuat sebelumnya menggunakan _Sample__c. Mari kita lihat

print(obj1._Sample__c)
3

Anda dapat mengakses variabel Double Pre Underscore menggunakan metode dalam kelas. Mari kita lihat contoh.

class SimpleClass:

    def __init__(self):
        self.__datacamp = "Excellent"

    def get_datacamp(self):
        return self.__datacamp

obj = SimpleClass()
print(obj.get_datacamp()) ## it prints the "Excellent" which is a __var
print(obj.__datacamp)     ## here, we get an error as mentioned before. It changes the name of the variable
Excellent



---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-5-8006c0a9b061> in <module>()
      9 obj = SimpleClass()
     10 print(obj.get_datacamp()) ## it prints the "Excellent" which is a __var
---> 11 print(obj.__datacamp)     ## here, we get an error as mentioned before. It changes the name of the variable


AttributeError: 'SimpleClass' object has no attribute '__datacamp'

Anda juga dapat menggunakan Double Pre Underscore untuk nama method. Mari kita lihat contoh.

class SimpleClass:

    def __datacamp(self):
        return "datacamp"

    def call_datacamp(self):
        return self.__datacamp()

obj = SimpleClass()
print(obj.call_datacamp()) ## same as above it returns the Dobule pre underscore method
print(obj.__datacamp())    ## we get an error here
datacamp



---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-1-cd8ce2e83589> in <module>()
      9 obj = SimpleClass()
     10 print(obj.call_datacamp()) ## same as above it returns the Dobule pre underscore method
---> 11 print(obj.__datacamp())    ## we get an error here


AttributeError: 'SimpleClass' object has no attribute '__datacamp'

Mari kita melihat name mangling dengan cara lain. Pertama, kita akan membuat variabel bernama _SimpleClass__name, lalu kita akan mencoba mengakses variabel tersebut menggunakan nama Double Pre Underscore.

Mari kita lihat contoh.

_SimpleClass__name = "datacamp"

class SimpleClass:

    def return_name(self):
        return __name

obj = SimpleClass()
print(obj.return_name()) ## it prints the __name variable
datacamp

Apakah Anda memahami konsepnya? Jika belum, cobalah membacanya kembali.

5.4. Double Pre And Post Underscores

__name__

Di Python, Anda akan menemukan berbagai nama yang diawali dan diakhiri dengan double underscore. Ini disebut sebagai magic methods atau dunder methods.

class Sample():

    def __init__(self):
        self.__num__ = 7

obj = Sample()
obj.__num__
7

Ini akan menimbulkan benturan jika Anda menggunakan method-method tersebut sebagai nama variabel Anda. Jadi, sebaiknya hindari menggunakannya.

Kesimpulan

Selamat! Anda berhasil. Anda telah menyelesaikan konsep yang paling membosankan di Python. Namun ini sangat membantu saat Anda bekerja dengan kode tingkat lanjut.

Kebanyakan orang seperti saya tidak memahami konsep ini pada pembacaan pertama. Jadi, jangan kehilangan kesabaran—bacalah kembali jika Anda belum memahaminya pada percobaan pertama. Jika Anda memiliki pertanyaan terkait artikel ini, jangan ragu untuk menyebutkannya di kolom komentar.

Jika Anda seorang pemula Python, saya menyarankan Anda mengambil kursus ini lalu membaca ulang artikel ini untuk pemahaman yang utuh.

Sumber:

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