ini_nama_variabel_snake_case
). Tapi underscore () memiliki arti khusus di Python. Jika pembaca merupakan programmer Python, sintaks `for \ in range(10)atau
__init__(self)` sudah cukup familiar. Artikel ini akan membantu pembaca memahami penggunaan underscore di Python. Ada lima kasus penggunaan underscore di Python yaitu:
- Menyimpan nilai ekspresi terakhir di interpreter
- Mengabaikan nilai tertentu
- Memberikan arti khusus bagi variabel atau fungsi
- Untuk dipakai oleh fungsi Internationalization (i18n) atau Localization (i10n)
- Memberi penanda digit di sebuah angka
Saat dipakai di interpreter
Interpreter Python menyimpan ekspresi terakhir di variabel bernama '_'. Fitur ini sudah ada di interpreter CPython standar dan kita bisa juga memakainya di interpreter yang lain.>>> 10
10
>>> _
10
>>> _ * 3
30
>>> _ * 20
600
Mengabaikan suatu nilai
Underscore juag dipakai untuk mengabaikan nilai tertentu. Jika merasa kita tidakmemerlukan sebuah nilai, kita bisa menuliskan underscore untuk menyimpannya.
# Mengabaikan suatu nilai saat unpacking
x, _, y = (1, 2, 3) # x = 1, y = 3
# Mengabaikan lebih dari value. Istilahnya "Extended Unpacking" dan hanya tersedia di Python 3.x
x, *_, y = (1, 2, 3, 4, 5) # x = 1, y = 5
# Mengabaikan index
for _ in range(10):
do_something()
# Mengabaikan value di lokasi tertentu.
for _, val in list_of_tuple:
do_something()
Memberikan arti khusus untuk nama fungsi atau variabel
PEP8 yang merupakan panduan penulis kode-kode Python mengenalkan 4 cara penulisan menggunakan _._single_leading_underscore
Aturan ini dipakai untuk mendeklarasikan variabel, fungsi, method, atau kelas private di sebuah module. Sebuah yang mengikuti aturan penulisan ini akan diabaikan saat pemanggilanfrom module impot *
.Karena Python tidak memiliki konsep private yang sesungguhnya, kita tidak bisa betul-betul mem-private-kan sesuatu dan tetap bisa memanggilnya dari module yang lain. Oleh karena itu, terkadang aturan ini disebut “weak internal use indicator”.
_internal_name = 'one_nodule' # private variable
_internal_version = '1.0' # private variable
class _Base: # private class
_hidden_factor = 2 # private variable
def __init__(self, price):
self._price = price
def _double_price(self): # private method
return self._price * self._hidden_factor
def get_double_price(self):
return self._double_price()
single_trailingunderscore
Aturan ini dipakai bisanya untuk menhindari konflik penamaan dengan keyword Python atau perintah yang lain.Tkinter.Toplevel(master, class_='ClassName') # Avoid conflict with 'class' keyword
list_ = List.objects.get(1) # Avoid conflict with 'list' built-in type
__double_leading_underscore
Double underscore dipakai untuk menghindari konflik nama atribute antar kelas. (istialh "mangling" artinya compiler atau interpreter akan memodifikasi nama fungsi atau variabel tersebut dengan aturan khusus dan tidak menggunaan nama yang sama seperti yang tertulis) Aturan mangling di Python ialah dengan menambahkan "_ClassName" didepan atribut yang menggunakan double underscore. Sehingga saat kita menulis "_method" maka nama kelas yang di mangling-kan menjadi "_ClassName\_method".class A:
def _single_method(self):
pass
def __double_method(self): # for mangling
pass
class B(A):
def __double_method(self): # for mangling
pass
Karena nama atribut yang menggunakan double underscore akan di mangling-kan, maka kita tidak bisa mengaksesnya dengan "ClassName.__method". Untuk detail lebih lengkap silahkan baca Python Naming. __double_leading_and_trailingunderscore_\
Aturan penulis ini dipakai untuk variabel atau method khusus (yang disebut juga "magic methods") seperti__init__
dan __len__
. Method ini memberikan fitur spesial atau melakukan sesuatu yang khusus. Misalnya, __file__
akan memberikan lokasi sebuah file Python, __eq__
akan dieksekusi saat ada perintah a == b
. Kita tentu saja bisa membuat method khusus seperti ini meskipun akan sangat jarang kasusnya dimana kita perlu membuat method tersebut.
class A:
def __init__(self, a): # method khusus untuk inisialisasi kelas
self.a = a
def __custom__(self): # method khusus buaan sendiri yang mungkin tidak akan pernah dibutuhkan
pass
Sebagai fungsi Internationalization (i18n) atau Localization (l10n)
Dalam Internationalization atau Localization penggunaan underscore hanyalah aturan menulis saja tidak memiliki fungsi secara sintaksis. Jadi, underscore tidak berarti itu merupakan fungsi i18n/l10n, ia hanyanya aturan menulis yang asal mulanya dari aturan C.Library
gettext
misalnya menggunakan aturan ini, lalu DJango yang merupakan web framework Python mendukung i18n/l10n juga mengenalkan aturan ini. # see official docs : https://docs.python.org/3/library/gettext.html
import gettext
gettext.bindtextdomain('myapplication','/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print(_('This is a translatable string.'))
Memberi penanda di nilai angka
Fitur ini mulai ditambahkan di Python 3.6. Dengan underscore kita bisa memisahkan digit-digit angka agar lebih mudah dibaca.
dec_base = 1_000_000
bin_base = 0b_1111_0000
hex_base = 0x_1234_abcd
print(dec_base) # 1000000
print(bin_base) # 240
print(hex_base) # 305441741
Sumber: hackernoon.com
No comments:
Post a Comment