热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【问题探索日志】python函数优化

#事情是这样的,我写的一个程序帧率上不去。然后发现了一个疑似有问题的地方,如下defaround(x,y):around_dict{(i,j)foriinrange(-1,2)fo

#

事情是这样的,我写的一个程序帧率上不去。

然后发现了一个疑似有问题的地方,如下

def around(x,y):
around_dict
= {(i,j) for i in range(-1,2) for j in range(-1,2) }
return sum(list(map(ask,around_dict)))

这个函数每帧大概会运行几千次,字典around_dict似乎会被“反复生成”。如果是的话,那是十分低效的。不如提出来设成全局变量,一次创建反复使用。

所以写了下面的程序验证是否有这样的问题

import time
global_d
= {(i,j):i+j for i in range(10) for j in range(10) }
def f1():
d
= {(i,j):i+j for i in range(10) for j in range(10) }
for x , y in d.items():
if x[0] + x[1] != y :
print("?")
def f2():
for x , y in global_d.items():
if x[0] + x[1] != y :
print("?")
def f3():
d
= global_d.copy()
for x , y in d.items():
if x[0] + x[1] != y :
print("?")

def timer(f):
t
= time.time()
for i in range(10000):
f()
print('time-'+f.__name__+":"+str(time.time()-t))
for i in range(1,6):
print("第%s次"%i)
timer(f1)
timer(f2)
timer(f3)

View Code

运行结果

'''
第1次
time-f1:0.29221653938293457
time-f2:0.11273312568664551
time-f3:0.13164758682250977
第2次
time-f1:0.29621100425720215
time-f2:0.10870814323425293
time-f3:0.1356358528137207
第3次
time-f1:0.28024840354919434
time-f2:0.10671043395996094
time-f3:0.14561057090759277
第4次
time-f1:0.29421257972717285
time-f2:0.11868166923522949
time-f3:0.13364267349243164
第5次
time-f1:0.2872304916381836
time-f2:0.10571765899658203
time-f3:0.13763070106506348
'''

f1 是原样的

f2 是提出来,写成了全局变量

f3 是每次copy全局变量,然后再用

结论

1,“反复创建”的问题是存在的,

2,设定为全局变量可以“一次创建多次使用”  可以提高效率,但是不建议对字典进行修改

两个原因:

  a,函数内只能访问全局变量,不能修改,除非global语句事先声明

  b,函数多次使用的字典均为同一字典,修改后可能影响后边函数的运行(不像f1那样多次创建的字典之间“相互隔离”)

3,如果函数要求使用“相互独立”的字典,f3的“一次创建多次copy”优于f1的“多次创建”

 

我是ansver我的answer只能信一半



推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
author-avatar
平凡兔子007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有