【发布时间】:2020-05-05 17:04:53
【问题描述】:
我正在尝试使我的 python 程序尽可能优化,而这部分我不确定。我需要存储迄今为止获得的最大值,并且我有 2 个候选代码可以这样做。哪一个是最优化时间的?或者有更快的方法吗?
代码 1:
if value > biggest_value:
biggest_value = value
代码 2:
biggest_value = max(biggest_value, value)
上下文:
def check_palindrome(num):
num = str(num)
if len(num) < 1:
return True
else:
if num[0] == num[-1]:
return check_palindrome(num[1:-1])
else:
return False
def main():
biggest_product = 0
for a in range(100, 1000):
for b in range(100, 1000):
product = a * b
if check_palindrome(product):
# store the biggest_product here
return biggest_product
main()
【问题讨论】:
-
您可以简单地衡量一下哪个更快,然后您就会知道。
-
尽可能优化地执行此操作可能意味着根本不执行此操作(例如,对值进行预排序)、批量执行(例如通过 numpy)或使用扩展名执行此操作(例如 numba或赛通)。您能否提供任何需要优化这个非常小的操作的上下文?
-
如果您认为这行代码会对程序的运行时间产生重大影响,您可以尝试两种方式,看看是否有任何影响(剧透:不会)。跨度>
-
优化比较在这里似乎是一个红鲱鱼。 Python 中的函数调用非常昂贵,这意味着递归回文检查将阻碍对结果所做的任何事情。构建产品的方式也非常低效,每个值至少检查两次,但大多数值更多。
-
即使对于第一次检查失败的大数字的最坏情况,
return num == num[::-1]也比您的递归检查快 10%(这种差异大致与最大值检查所用的一样多)。对于需要检查所有数字的实际回文,您的版本要慢五倍。请注意,如果数字是按升序生成的,则无需检查新数字是否大于上一个数字。
标签: python optimization