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

如果是累加就又慢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值