如何用一行代码让运行速度提高近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进阶文章点击此处获取

相关文章
|
27天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
235 7
|
1月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
230 100
|
1月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
323 95
|
2月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
226 104
|
2月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
419 99
|
1月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
149 88
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
1月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
419 1
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
262 102