Understanding the underscore( _ ) of Python :
The underscore ( _ ) is special in Python.
There are 5 cases for using the underscore in Python.
When used in interpreter :
Example:
>>> x=10
>>> x
10
>>> _
10
>>> _*2
20
>>> _
20
>>> _+3
23
>>> _
23
>>> y=_/3
>>> y
7.666666666666667
For Ignoring the values:
Example:
Ignore a value when unpacking:
>>> x, _, y = (1, 2, 3)
>>> x
1
>>> y
3
>>>
Ignore the multiple values:
>>> x, *_, y = (1, 2, 3, 4, 5)
>>> x
1
>>> y
5
>>>
Ignore the index:
for _ in range(10):
print("hai")
hai
hai
hai
hai
hai
hai
hai
hai
hai
hai
def do_something( ):
print("hello")
for _ in range(10):
do_something()
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
Ignore a value of specific location:
>>> x=(5,10,15,20,25)
>>> for _,val in x:
do_something()
Give special meanings to name of variables and functions:
single underscore( _ ):
example:
_variablename or _functionname or _methodname or _classname
example:
variablename_ or functionname_ or methodname_ or classname_
Tkinter.Toplevel(master, class_='ClassName')
# Avoid conflict with 'class' keyword
list_ = List.objects.get(1)
# Avoid conflict with 'list' built-in type
double underscore( _ _ ):
example:
_ _varaiblename or _ _functionname or _ _methodname or _ _classname
example:
_ _variablename_ _ or _ _functionname_ _ or _ _classname_ _ or __methodname__
example:
class A:
def __init__(self, a):
self.a = a
def __custom__(self):
pass
As Internationalization(i18n)/Localization(l10 n) functions :
# 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.'))
To separate the digits of number literal value:
>>> x=1_00
>>> x
100
>>> y="siva_krishna"
>>> y
'siva_krishna'
>>> z=0b_101
>>> bin(z)
'0b101'
>>>
The underscore ( _ ) is special in Python.
There are 5 cases for using the underscore in Python.
- For storing the value of last expression in interpreter.
- For ignoring the specific values. (so-called “I don’t care”)
- To give special meanings and functions to name of variables or functions.
- To use as ‘Internationalization(i18n)’ or ‘Localization(l10n)’ functions.
- To separate the digits of number literal value.
When used in interpreter :
- The python interpreter stores the last expression value to the special variable called ‘_’.
Example:
>>> x=10
>>> x
10
>>> _
10
>>> _*2
20
>>> _
20
>>> _+3
23
>>> _
23
>>> y=_/3
>>> y
7.666666666666667
For Ignoring the values:
- The underscore is also used for ignoring the specific values.
- If you don’t need the specific values or the values are not used, just assign the values to underscore.
Example:
Ignore a value when unpacking:
>>> x, _, y = (1, 2, 3)
>>> x
1
>>> y
3
>>>
Ignore the multiple values:
- Note:which is available in only Python 3.x.
>>> x, *_, y = (1, 2, 3, 4, 5)
>>> x
1
>>> y
5
>>>
Ignore the index:
for _ in range(10):
print("hai")
hai
hai
hai
hai
hai
hai
hai
hai
hai
hai
def do_something( ):
print("hello")
for _ in range(10):
do_something()
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
Ignore a value of specific location:
>>> x=(5,10,15,20,25)
>>> for _,val in x:
do_something()
Give special meanings to name of variables and functions:
- The underscore may be most used in ‘naming’.
- The PEP8 which is Python convention guideline introduces the following 4 naming cases.
single underscore( _ ):
- leading underscore( _ )
example:
_variablename or _functionname or _methodname or _classname
- This convention is used for declaring protected variables, functions, methods and classes in a module.
- tailing underscore( _ )
example:
variablename_ or functionname_ or methodname_ or classname_
- This convention could be used for avoiding conflict with Python keywords or built-ins.
Tkinter.Toplevel(master, class_='ClassName')
# Avoid conflict with 'class' keyword
list_ = List.objects.get(1)
# Avoid conflict with 'list' built-in type
double underscore( _ _ ):
- leading double underscore(_ _)
example:
_ _varaiblename or _ _functionname or _ _methodname or _ _classname
- double underscore will mangle the attribute names of a class to avoide the conflicts of attribute names between classes.
- (so-called “mangling” that means that the compiler or interpreter modify the variables or function names with some rules, not use as it is).
- The mangling rule of Python is adding the “_ClassName” to front of attribute names are declared with double underscore.
- That is, if you write method named “__method” in a class, the name will be mangled in “_ClassName__method” form.
- leading and tailing double underscores(_ _)
example:
_ _variablename_ _ or _ _functionname_ _ or _ _classname_ _ or __methodname__
- This convention is used for special variables or methods (so-called “magic method”) such as _ _init_ _ , _ _len__ , _ _new_ _ ,_ _del_ _,......etc.
- These methods provides special syntactic features or does special things.
example:
class A:
def __init__(self, a):
self.a = a
def __custom__(self):
pass
As Internationalization(i18n)/Localization(l10 n) functions :
- The built-in library gettext which is for i18n/l10n uses this convention, and Django which is Python web framework supports i18n/l10n also introduces and uses this convention.
# 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.'))
To separate the digits of number literal value:
- This feature was added in Python 3.6. It is used for separating digits of numbers using underscore for readability.
>>> x=1_00
>>> x
100
>>> y="siva_krishna"
>>> y
'siva_krishna'
>>> z=0b_101
>>> bin(z)
'0b101'
>>>
No comments:
Post a Comment