2017-01-15 2 views
-3

Я бег этой маленькой петли на Jupyter ноутбукеПочему это не для цикла в Python?

import time 

def time_loop(reps): 

    start = time.clock() 
    count = 0 
    for i in range(reps): 
     count += 1 
    return time.clock() - start 

time_loop(10000^100) 

Независимо от того, что я вхожу в качестве аргумента, я, кажется, всегда получаю выход около 0,003

0.0031050000000050204 

Что происходит?

Предполагается, что python понимает, что результат цикла будет просто count = reps и завершает цикл?

Но если я запускаю это вместо

import time 
import numpy as np 

def time_loop(reps): 

    start = time.clock() 
    count = 0 
    for i in range(reps): 
     count += np.sin(reps) 
    return time.clock() - start 

time_loop(10000^100) 

Это займет больше времени, поскольку я увеличиваю аргумент, даже если результат выполнения цикла по-прежнему довольно просто подсчитывает = повторения * Sin (повторения).

+0

Как вы думаете, '10000^100 'вычисляет? Это не возвышение - это эксклюзивный 'или'. –

ответ

1

^ является XOR, а не возведения:

>>> 10000^100 
10100 

Это большое число, но не так, как с возведения: **, который возвращает:

>>> 10000**100 
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

Это также берет "а" перебирать ,

Хорошая ссылка для операторов и их приоритет доклада доступен в python documentation:

^- побитовое исключающее

** - Возведение