普通小明 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日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)