Base types¶
Python is dynamically typed¶
it means
- variables don’t have fixed type, the types can change
- the variable’s type is specified at runtime during the assignment
>>> a = 1
>>> type(a)
<class 'int'>
>>> a = 2.
>>> a
2.0
>>> type(a)
<class 'float'>
>>> b = "b"
>>> type(b)
<class 'str'>
>>> c = "3"
>>> type(c)
<class 'str'>
>>> int(c)
3
>>> c2 = int(c)
>>> c2
3
>>> type(c2)
<class 'int'>
>>>
Some builtin types¶
base types:
- integer,
- float,
- string,
- boolean
base container types:
- list,
- dictionnary,
- set
list type sample:
>>> l = range(10)
>>> l
range(0, 10)
>>> for i in l:
... print(i)
...
0
(...)
9
dictionary type sample:
>>> d = dict(a=2, b=5)
>>> d
{'b': 5, 'a': 2}
>>> type(d)
<class 'dict'>
a dict is not a ordered type. If you need an ordered dict, use a more advanced collection type like an ordered dict
>>> from collections import OrderedDict
>>> d = OrderedDict({'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2})
>>> d
OrderedDict([('orange', 2), ('apple', 4), ('banana', 3), ('pear', 1)])
>>>
set sample:
>>> set(range(10))
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
a set is not ordered
>>> s = set(range(10))
>>> 3 in s
True
Mutable types and non-mutable types¶
A set is immutable, whereas a list is mutable:
>>> s = set([1,2])
>>> l = [1,2]
>>> l.append(3)
>>> list(l)
[1, 2, 3]
>>> s.append(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'set' object has no attribute 'append'
>>>
A string is immutable. If you want to modify it, build another string:
>>> s = "hello"
>>> s.replace('ll', 'bb')
'hebbo'
>>> s+"you"
'helloyou'
>>> s
'hello'
you can see that s hasn’t changed.
Even base types are objects¶
It means that in python, classes are types (let’s understand it like that at first glance)
>>> a = 2
>>> isinstance(a, int)
True
>>> s = "a"
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
(...)
'__init__', '__iter__', '__le__', '__len__', '__lt__', ]
s has methods. It’s an objects. The type of s is the class int.
>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
>>> isinstance(d, dict)
True
>>>
special methods: the iterator sample
>>> l = range(10)
>>> for i in l:
... print(i)
We can use the for statement only because the list type has a special __iter__ method:
>>> l.__iter__()
<range_iterator object at 0x7f28b76e1e10>
>>>
we will see the special methods later.