Edit: In C, the version that loops is 15 times faster than the version that allocates a new string. Python is weird.
In [1]: dl = lambda n: 1 if n < 10 else 1 + dl(n // 10)
In [3]: map(dl, [0, 1, 9, 10, 99, 1000, 15432, 32, 801])
Out[3]: [1, 1, 1, 2, 2, 4, 5, 2, 3]
In [4]: %timeit dl(15322)
100000 loops, best of 3: 4.64 µs per loop
In [5]: %timeit len(str(15322))
1000000 loops, best of 3: 1.41 µs per loop
In [6]: %timeit dl(0)
1000000 loops, best of 3: 721 ns per loop
In [7]: %timeit len(str(0))
1000000 loops, best of 3: 1.24 µs per loop