IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python暴力速度实验 -> 正文阅读

[Python知识库]python暴力速度实验

暴力实验


环境:py3.7.2,pyCharm内运行同时开了百度云、浏览器qq等其他应用程序

此次实验的意义在于让我们对python暴力的速度心里有个谱。

探究循环内print对程序执行速度的影响

i = 0
while True:
    i += 1
    print(i)

一分钟之后打印到了:15234500

如果改成这样

def main():
    i = 0
    while True:
        i += 1
        if i % 100 == 0:
            print(i)
    return None

一分钟之后打印到了:588877600,速度是上一个的38倍

继续降低打印频率

def main():
    i = 0
    while True:
        i += 1
        if i % 10000 == 0:
            print(i)
    return None

一分钟之后到了:761820000,速度是每一步都打印的50倍,总体提升的幅度减小了

再继续降低打印频率

def main():
    i = 0
    while True:
        i += 1
        if i % 1000000 == 0:
            print(i)
    return None

一分钟之后到了:824000000,速度是第一次实验的54倍,速度提升效果已经不明显了。

一分钟可以遍历800…00(8后8个零) 这么多次

结论:

如果每一步都打印,会拖慢50倍左右

for循环比while循环快吗

def main():
    for i in range(1000000000000):
        print(i)
    return None

一分钟之后遍历到了:14596281,相比while循环,居然还慢了5%

列表推导式更快吗

def timer(func):
    def newFunc():
        t1 = time()
        func()
        print(time() - t1)

    return newFunc


@timer
def main():
    arr = []
    for i in range(500000):
        arr.append(i ** 2)
    return None
0.17652654647827148
@timer
def main():
    # arr = []
    # for i in range(500000):
    #     arr.append(i ** 2)
    arr = [i ** 2 for i in range(500000)]
    return None
0.15957307815551758

只快了一点点 0.02秒,扩大数据量发现也依然只是快0.02秒

空for循环测试

@timer
def main():
    for i in range(800000000):
        pass
    return None

13.081990480422974秒

14.064324378967285

如果里面添加一个判断语句

@timer
def main():
    for i in range(800000000):
        if i % 2 == 0:
            pass
        pass
    return None

37.41891169548035,速度变慢了2.6倍

如果改成两个pass,是不是两个pass都会执行

@timer
def main():
    for i in range(800000000):
        pass
        pass
    return None

13.391043901443481秒,似乎不会

经过测试发现即使加了20个pass也还是13秒左右

如果把pass改成点点点

@timer
def main():
    for i in range(800000000):
        ...
    return None

13.304449796676636,依然如此

多加了20行的点点点,还是13.175700902938843,13秒左右,貌似点点点还比pass更快。

其他语句比较速度

@timer
def main():
    for i in range(800000000):
        arr = []
    return None

26.918959379196167

@timer
def main():
    for i in range(800000000):
        a = 1
    return None

15.657132625579834

声明一个变量的速度要快于声明list的速度

@timer
def main():
    a = 0
    for i in range(800000000):
        a += 1
    return None

33.9800968170166

如果是累加就又慢了

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:26:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:47:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码