Are str() and int() time consuming in python?
Question: I face myself using a lot of this kind of structure:

    
    
    for node in range(int(self.num_nodes)):
        dists[str(node)] = -1
    

So, my questions is: what does python(3+) uses when `str()` or `int()`, for
example, are called? It just casts? It converts? (something else?)

How would you advice me to write this kind of code? Keep in mind that the key
for dists must be a `str` and `num_nodes` is also a `str`.


Answer: How expensive `str` and `int` are depend entirely on the objects that you pass
to them. Ultimately, they just call the object's
[`__str__`](https://docs.python.org/3/reference/datamodel.html#object.__str__)
and
[`__int__`](https://docs.python.org/3/reference/datamodel.html#object.__int__)
hook methods. For most simple objects, these operations should be pretty fast.
e.g. to convert a simple string to an integer takes my computer about .5
microseconds:

    
    
    $python -mtimeit -s 'x="1"' 'int(x)'
    1000000 loops, best of 3: 0.479 usec per loop
    

and the reverse operation only takes a little over .1 microseconds:

    
    
    $ python -mtimeit -s 'x=1' 'str(x)'
    10000000 loops, best of 3: 0.12 usec per loop
    

however, it's very easy to create pathological objects for which this would be
_really_ expensive.

    
    
    import time
    class Argv(object):
        def __str__(self):
            time.sleep(1000)
            return 'ha ha ha!'
    

