def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res
def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res
def andrej(number):
return sum(int(i) for i in str(number))
def ed(number):
return sum(map(int, str(number)))
def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res
def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res
def calc_numbers3(number):
res = 0
while number:
res = res + number % 10
number = number // 10
return res
In [3]: timeit andrej(1234567)
100000 loops, best of 3: 9.15 us per loop
In [4]: timeit ed(1234567)
100000 loops, best of 3: 8.54 us per loop
In [5]: timeit calc_numbers1(1234567)
100000 loops, best of 3: 3.19 us per loop
In [6]: timeit calc_numbers2(1234567)
100000 loops, best of 3: 2.02 us per loop
In [7]: timeit calc_numbers3(1234567)
100000 loops, best of 3: 2.03 us per loop
def digit_sum(n):
s = str(n)
return sum(map(ord, s)) - len(s)*ord('0')
Kogromда так, мне казалось на пару вызовов меньше должно быть,а вышло на оборот. А остальные так для общей картины.
Zubchick, я не понял, к чему этот пример.