普通小明 2022-05-06 23:49 采纳率: 100%
浏览 30
已结题

关于Python引用全局变量和局部变量的效率问题

检测均为处理数组数据,分为在函数内处理和在主函数处理同样的功能
问题为:原本在函数内调用局部变量效率高,所以加法操作局部变量中用时少,为什么而次方操作用时多
测试1处理为十次方
测试2处理为加法操作
以下为测试1

from time import time
def cc(x):
    for i in range(len(x)):
        x[i]**=10
    return
res=[i for i in range(1000000)]
a=time()
for i in range(len(res)):
    res[i]**=10
print(time()-a)
b=time()
res=cc(res)
print(time() - b)
'''
输出
0.4724574089050293 #主函数处理段运行时间
1.9870216846466064 #函数处理段运行时间
'''

以下为测试2

from time import time
def cc(x):
    for i in range(len(x)):
        x[i]+=ord('a')
    return
res=[i for i in range(10000000)]
a=time()
for i in range(len(res)):
    res[i]+=ord("a")
print(time()-a)
b=time()
res=cc(res)
print(time() - b)
'''
输出
1.774261474609375 #主函数处理段运行时间
1.3109838962554932 #函数处理段运行时间
'''
  • 写回答

1条回答 默认 最新

  • mengyoufengyu 2022-05-07 00:02
    关注

    1.因为测试1经过次幂操作,已经是一个较大的数字了再进行一次幂操作,肯定慢了。正确的测试应该在print(time()-a),后面重新初始化res。
    2.测试2中,因为是add操作,res经过第一次操作后,影响不大。
    测试1正确的代码如下:

    
    from time import time
    def cc(x):
        for i in range(len(x)):
            x[i]**=10
        return
    res=[i for i in range(1000000)]
    a=time()
    for i in range(len(res)):
        res[i]**=10
    print(time()-a)
    res=[i for i in range(1000000)]  # 重新初始化res,避免上一步计算后的大数值
    b=time()
    res=cc(res)
    print(time() - b)
    '''
    输出
    0.35755348205566406
    0.34195947647094727
    '''
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月15日
  • 已采纳回答 5月7日
  • 创建了问题 5月6日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况