普通小明 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 python使用python-pptx如何给幻灯片添加只读密码。
  • ¥15 深度神经网络传递自变量损失
  • ¥15 删除s的前驱节点,但是不知道错哪里了
  • ¥15 oracle数据库备份表如何操作
  • ¥15 软件定义网络mininet和onos控制器问题
  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错