我正在尝试打印一个大于或等于给定数字'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/

10-10 11:00