Jalankan dan edit kode dari Tutorial ini secara online
Jalankan kode2. 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:

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)
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