# Operators

Python's has many operators, like +, -, /, *, ** and %. They are polymorphic and work differently for the different data types.

## Some operation using numbers

```
>>> (1+2)**2
9
>>> (2+3*4)/2
7
>>> 7%3   # % is the modulo operator
1
>>> 7 == 7
True
>>>
```

## Some operators using strings

```
>>> "Andrew" + " " + "Dalke"
'Andrew Dalke'
>>> "*" * 10
'**********'
>>> "My name is %s.  What's your name?"  % "Andrew"
'My name is Andrew.  What's your name'
>>> "My first name is %s and family name is %s" % ("Andrew", "Dalke")
'My first name is Andrew and family name is Dalke'
>>> "My first name is %(first)s.  Is yours also %(first)s?" % \
...    {"first": "Andrew", "family": "Dalke"}
'My first name is Andrew.  Is yours also Andrew?'
>>> "Andrew" == "Dalke"
False
>>>
```

## Some operators using lists

```
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [1, 2] * 3
[1, 2, 1, 2, 1, 2]
>>>
```

## Operator Precedence

When you have an expression that contains several operators, they are evaluated in an order determined by their precedence. The precedence of the operators follows the rules of arithmetic. Others follow a precedence that usually does what you think they should do. If uncertain you can use parentheses to force precedence:
```
2+3*4;    # evaluates to 14, multiplication has precedence over addition
(2+3)*4;  # evaluates to 20, parentheses force the precedence
```

## Logical Operators

The boolean operators are and and or. These use the truth value of their two parameters figure out if the result is true or false. (Actually, they return the value which made the expression true or false, but I won't get into that now.)
```
>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False or True
True
>>>
```