如何用一行代码让运行速度提高近10倍 | Python从入门到精通:入门篇之二十

简介: 本节课对前面的质数练习进行一次程序的优化,使代码结构更加的清晰。

第十九节:循环终止之break和continue的用法

求100以内的所有质数

i=2
while i<=100 :
    flag = True
    j=2
    while j<i:
        if i%j==0:
            flag=False
        j+=1
    if flag :
        print(i)
    i+=1

这是我们之前写过的一个质数练习的代码,执行结果显然是没有问题的。但是只追求结果是没有什么意义的,就比如,打印100以内的质数,为什么我们要使用循环,而不是用第一次判断质数的代码,一个一个输入进行判断呢?那同学们考虑一下,这个循环就是程序的最优性能的一个质数判断代码了吗?跟着老师往下看。
要提升性能,首先就要知道当前程序的性能如何,可以通过引入Python的模块来判断,该模块可以输出程序运行时长,我们就以此数据为依托来进行性能的提升。
解释一下模块的概念,通过模块可以对Python进行扩展。
为了获得程序执行的时长,引入一个time的模块,time函数可以用来获取当前的时间,通过获取程序的开始时间和结束时间的二者之差来统计该时长。为了使得样本更加具有代表性,将数据改为2~10000。代码如下:

from time import*
#获得程序运行的开始时间
begin=time()
i=2
while i<=10000:
    flag = True
    j=2
    while j<i:
        if i % j == 0 :
            flag = False
        j += 1
    if flag :
        pass
        #打印语句用时太久,将其删掉,为不影响程序的运行,直接pass就好。
        # print(i)
    i+=1

#获取程序运行的结束时间
end=time()
#获得程序运行时长
print("程序运行的时长为:",end-begin,"秒")

执行结果为:
image.png
可以看到,程序运行的时长为:8.815秒。
同学们来思考一下,咱们当前的判断质数的代码逻辑:举个例子,当要确定10000是否是质数的时候,计算机需要将10000与2~9999都进行一个除法运算,但是其实程序在将10000与2做除法的时候就可以判断该数字不是质数,没必要再进行继续判断,那该如何实现这一逻辑呢。
结合我们上节课讲的,一旦程序判断10000可以整除2,就没必要继续判断了,也就是说内层循环可以结束了。所以,我们可以用break来完成这一功能。
但是将break放在什么位置呢?
当程序进入判断if i%j==0 flag=False,此时对于i来说只要看到flag的值为false,就没必要继续了,所以break 可以添加在flag变为false的后面,即如下:

from time import*
begin=time()
i=2
while i<=10000:
    flag = True
    j=2
    while j<i:
        if i % j == 0 :
            flag = False
            break
        j += 1
    if flag :
        pass
    i+=1
end=time()
print("程序运行的时长为:",end-begin,"秒")

执行结果为:
image.png
可以看到,此时只需要0.916秒程序就可以执行完毕。
但是这个就是最优的代码了吗?前人从来没有停止过思考,你也可以去想下,是否还可以有更加优质的算法,具体的教学老师在下节课再讲授。提示:还是可以从内层循环着手。
第二十一节:一行代码都不加如何提升性能

视频学习:阿里云大学之Python进阶必看

配套Python进阶文章点击此处获取

相关文章
|
5天前
|
并行计算 C语言 开发者
优化Python代码的五大技巧
Python作为一种流行的编程语言,在各种应用场景中广泛使用。然而,随着项目规模的增长和需求的变化,Python代码的性能和可维护性也成为了关键问题。本文将介绍优化Python代码的五大技巧,帮助开发者提升代码效率和质量。
|
1天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
1天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
1天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
1天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
1天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
1天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
2天前
|
人工智能 Python
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
18 0
|
2天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
5 0
|
2天前
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
10 0

热门文章

最新文章