【问题探索日志】python 函数优化
2019-05-13 07:16:53来源:博客园 阅读 ()
#
事情是这样的,我写的一个程序帧率上不去。
然后发现了一个疑似有问题的地方,如下
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)
运行结果
''' 第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的“多次创建”
原文链接:https://www.cnblogs.com/ansver/p/10854493.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:如何禁用python警告
- python常见面试题15道 (附答案)你必须得会 2019-07-24
- 文本分类问题相关原理知识 2019-07-24
- python 之网络编程(基于TCP协议Socket通信的粘包问题及解决 2019-07-24
- 20190710-汉诺塔算法 2019-07-24
- 封装查找元素以及集成日志输出,Base模块 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash