Ну цифры говорят сами за себя:
def map_int(n):
return sum(map(int, str(n)))
def map_ord(n):
s = str(n)
return sum(map(ord, s)) - len(s)*ord('0')
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
for f in map_int,map_ord,calc_numbers1,calc_numbers2:
n = 123456789
start = time()
for i in range(100000):
s = f(n)
print( "time spent for {0} = {1} sec".format( f.__name__, time() - start ))
для n=123456789:
time spent for map_int = 1.187000036239624 sec
time spent for map_ord = 0.26799988746643066 sec
time spent for calc_numbers1 = 0.6729998588562012 sec
time spent for calc_numbers2 = 0.3560001850128174 sec
для n=12345678901234567890:
time spent for map_int = 2.4769999980926514 sec
time spent for map_ord = 0.4119999408721924 sec
time spent for calc_numbers1 = 1.8000001907348633 sec
time spent for calc_numbers2 = 0.8689999580383301 sec
Используется Python 3.2