我正在尝试打印一个大于或等于给定数字't'的原始回文
我的代码是-
from math import sqrt
#import sys
from time import time
def is_prime(t):
flag=True
if(t<2):
return False
for i in range(2,int(sqrt(t))+1):
if t%i==0:
flag=False
break
if flag==True:
return True
else:
return False
def is_palindrome(t):
flag=False
string=str(t)
length=len(string)
count=0
for i in range(0,length/2):
if(string[i]==string[length-1-i]):
count+=1
else:
break
if count==length/2:
return True
else:
return False
def start():
t= int (raw_input())
t0 = time()
while(True):
apple=is_prime(t)
if(is_palindrome(t)):
if(apple):
print t
print "Execution time:", round(time()-t0, 3), "s"
break
t=t+1
start()
这段代码运行良好。在start()函数中,我添加了一条语句来计算执行时间。对于一个测试用例-99999执行时间约为14.05s。
但是,如果我更改功能,请从下面的一项开始-
def start():
t= int (raw_input())
t0 = time()
while(True):
if(is_palindrome(t)):
if(is_prime(t)):
print t
print "Execution time:", round(time()-t0, 3), "s"
break
t=t+1
然后,相同测试用例的执行时间(99999)减少为1.3s。我是python的新手。我不明白,仅仅分配一个新变量,执行时间如何发生很大变化?
请帮助。
最佳答案
它与分配变量无关。运行这个例子
def start2():
t= int (raw_input())
t0 = time()
while(True):
if(is_palindrome(t)):
apple=is_prime(t)
if(apple):
print t
print "Execution time:", round(time()-t0, 3), "s"
break
t=t+1
大约需要1.3秒。
因此,这里发生的变化是您分配苹果的地方。
通过在
if(is_palindrome(t)):
之前放置Apple分配来降低代码速度的原因是编译器优化和缓存。编辑:请参阅Dave Bacher的答案以获取正确答案。
关于python - Python查询执行时间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35946194/