# Python Standard operators as functions

In programming, operator is generally a symbol (key) predefined to perform a certain operation such as addition, subtraction, comparison etc. Python has a large set of built-in operations divided in different categories such as arithmetic, comparison, bit-wise, membership etc.

The operator module in python library consists of functions corresponding to built-in operators. Names of the functions are analogous to type of corresponding operator. For example, add() function in operator module corresponds to + operator.

Python’s Object class has dunder (double underscore before and after name) methods corresponding to operator symbols. These dunder methods can be suitably overloaded in user defined classes to implement operator overloading. The operator module also consists of corresponding dunder functions. For example, add() as well as __add__() both implement operation of + symbol.

>>> from operator import *

To learn about functions corresponding to arithmetic operators, two variables are initialized as

>>> a = 10
>>> b = 20

add(), sub() and mul() correspond to +, - and * operators. The / symbol of division is implemented by truediv() function.

>>> add(a,b)
30
>>> a + b
30
>>> sub(a,b)
-10
>>> a - b
-10
>>> mul(a,b)
200
>>> a * b
200
>>> truediv(a,b)
0.5
>>> a / b
0.5

Other arithmetic operators %, ** and // are implemented by mod(), pow() and floordiv() functions from operator module.

>>> a = 5
>>> b = 3
>>> a % b
2
>>> mod(a,b)
2
>>> a ** b
125
>>> pow(a,b)
125
>>> a // 2
2
>>> floordiv(a,b)

Logical operators <, <=, >, >=, == and != are implemented by lt(), le(), gt(), ge(), eq() and ne() function respectively.

>>> a = 5
>>> b = 7
>>> a < b
True

>>> lt(a,b)
True

>>> a <= b
True

>>> le(a,b)
True

>>> a > b
False

>>> gt(a,b)
False

>>> a >= b
False

>>> ge(a,b)
False

>>> a == b
False

>>> eq(a,b)
False

>>> a != b
True

>>> ne(a,b)
True

## Functions working with sequences

Python’s built-in operators in, + (concatenation), and del are respectively implemented by contains(), concat(), delitem() functions. For indexed assignment operator seq[x] = y, setitem() function is used. For obtaining value of seq[x], getitem() function is used.

>>> a = [1,2,3]
>>> b = ['a','b','c']
>>> a + b #sequence concatenation
[1, 2, 3, 'a', 'b', 'c']

>>> concat(a,b)
[1, 2, 3, 'a', 'b', 'c']

>>> contains(a,'2') #implements in operator
False

>>> contains(a,2)
True

>>> 2 in a
True

>>> b[1] = 'x' #index assignment implemented by setitem()

>>> b
['a', 'x', 'c']

>>> setitem(b,1,'b')
>>> b
['a', 'b', 'c']

>>> a[1] #fetching value at index – implemented by getitem()
2

>>> getitem(a,1)
2

>>> del b[2] #deleting element at index. Corresponding function is delitem()

>>> b
['a', 'b']

>>> delitem(a,2)
>>> a
[1, 2]

Operators that perform assignment and computation in a single step are called in-place operator. Python’s in-place operators are implemented by corresponding functions in operator module. The += operator which performs add and assign operation has corresponding iadd() function. Likewise each operator function prefixed by ‘i’ forms in-place equivalent.

>>> a = 10
>>> b = 20
>>> a = iadd(a,b) #equivalent to a += b
>>> a
30

### In-place subtraction

>>> a = 10
>>> b = 20
>>> a = isub(a,b) #equivalent to a -= b
>>> a
-10

### In-place multiplication

>>> a= 10
>>> b = 20
>>> a = imul(a,b) #equivalent to a *= b
>>> a
200

### In-place division

>>> a = 10
>>> b = 4
>>> a = itruediv(a,b)
>>> a
2.5

The operator module also consists of functions implementing standard bit-wise operators

>>> and_(10,2) #equivalent to 10 & 2
2
>>> or_(10,2) #equivalent to 10 | 2
10
>>> xor(10,2) #equivalent to 10 ^ 2
8
>>> lshift(10,2) #equivalent to 10 << 2
40
>>> rshift(10,2) #equivalent to 10 >> 2
2