Surprised you didn't have `sum(map(int, number_string))` in there.
In [5]: def f(x):
...: x = str(x)
...: return sum(map(int, x))
In [6]: %timeit second_way_optimized(x)
1000 loops, best of 3: 200 µs per loop
In [7]: %timeit f(x)
1000 loops, best of 3: 223 µs per loop
Marginally slower, a hell of a lot easier to read what's going on.