python高级编程(第12章:优化学习)1
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#由于5,6,7,8,9,10,11主要是在包,测试之类的学习所以这边就不学习
#优化:通用原则和剖析技术
print(u'过早进行优化是编程中万恶之源-------Donald Knuth')
#1:优先三原则
"""
无论结果如何,优化是需要代价的,当代码能够正常工作时,不用会理会它(有时)可能比不惜一切代价尝试让它运行得更快要好一些
当优化代码,需要3条原则:
1:首先能够让它正常工作
2:从用户的观点进行
3:保持易读的代码风格
"""
#首先能够让它正常工作
"""
当一边编写代码和一边优化代码时是最常见的错误,这是不可能的,因为瓶颈往往会出现意想不到的地方
应用程序是由很多复杂的交互组成的,在实际使用之前不可能得到一个完整的视图
当然,这不是不尝试尽可能编写更快的函数或者方法的理由。应该认真地使其复杂度尽可能降低,并避免无用的重复,所以,首先能够让它正常工作!
对于行级代码 ,python哲学是完成一个目标尽可能有且只有一个方法,所以只要坚持第2和第3章中介绍的python风格语法,则往往写出来的代码就会更好并且更快
在剖析之前,不要做以下之事
1:开始编写为函数缓存数据的全局字典
2:考虑以C语言或者Pyrex之类混杂语言来对代码的一个部分进行扩展
3:寻找外部程序库来完成一些基本计算
"""
#扩展模块:NUMERIC可以简化开发并且能够生成简单,更快速的代码,而且不应该在有很好的程序库可利用的时候自己重新编写一个函数
#Soya 3d是基于opengl游戏引擎,使用c和pyrex开发的,作用是:显示实时的3D图形时执行快速的矩形操作
#Soya 3d官方:(http://home.gna.org/oomadness/en/soya3d/index.html)
#OpenAL(Open Audio Library)是自由软件界的跨平台音效API。它设计给多通道三维位置音效的特效表现 ,部分软件需要此功能的支持,
#GLEW(是一个跨平台的C++扩展库,基于OpenGL图形接口。),介绍:http://blog.csdn.net/pythonfx/article/details/9771047
#SDL(是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。):http://zh.wikipedia.org/wiki/SDL
#Cal3D(骨骼动画系统Cal3D)官方:http://home.gna.org/cal3d/
#libFreeType2(一个免费软件 图书馆呈现字体)官方:http://www.freetype.org
#freefont(python验证码生成工具模块)官方:http://fontfabric.com,例子:http://www.oschina.net/code/snippet_129830_17856
#ode(一个开源、高性能库模拟刚体动力学。 它功能齐全,稳定、成熟和独立的平台 容易使用C / c++ API。 它拥有先进的联合类型和集成与摩擦碰撞检测。 颂歌是用于模拟车辆在虚拟对象 现实和虚拟生物的环境。 目前用在许多电脑游戏,3 d创作工具和仿真工具。)官方:http://www.ode.org
#更多请看:http://home.gna.org/oomadness/en/soya3d/index.html
print ('优化应该在已经能够正常工作的程序上进行,先间它能够正常工作,然后让它变得更好,最好使它更快---kent beck')
#从用户观点进行
"""
虽然能够让程序更好更快启动是一种好事,但是应该认真地安排优化的优先级,并且提出以下问题:
1:客户是否要求要求提速
2:谁发现程序慢了?
3:提速需要多少成本,值得吗?那些部分需要提速?
记住:优化是有成本的,开发人员的观点是对客户来说也许没什么意义,除非编写是框架或者程序库,客户也是开发人员!
注意:优化不是一个游戏,它应该只在必要时进行
"""
#保持代码易读(从而易于维护)
"""
当优化到一定目标是,如果还有一部分没有理解,那些应该停止工作并且寻求其他解决方案可能是个好主意!
优化不应该让代码难以理解,如果出现这样情况,应该寻求替代方法,如扩展或者重新设计,不过在代码易读生和速度上总会有一个好的折衷方案
"""
python高级编程(第12章:优化学习)1的更多相关文章
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- 第九章:Python高级编程-Python socket编程
第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式2
# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...
- python高级编程技巧
由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr ...
- python高级编程之选择好名称:完
由于时间关系,python高级编程不在放在这边进行学习了,如果需要的朋友可以看下面的网盘进行下载 # # -*- coding: utf-8 -*- # # python:2.x # __author ...
- Python高级编程-Python一切皆对象
Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- python高级编程:有用的设计模式1
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...
- python高级编程读书笔记(一)
python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...
随机推荐
- [Oracle] 使用触发器实现IP限制用户登录
在Oracle里,不像MySQL那样方便,可以直接在用户上进行IP限制,Oracle要实现用户级别的IP限制,可以使用触发器来迂回实现,下面是一个触发器的例子: create or replace t ...
- Android开发小问题——java使用
2013-09-25 导语:离上次写博客有点久了,这次写两个开发中解决的问题吧. 正文: 1.ArrayList<E>使用remove问题: 2.字符串映射到函数运行方法: ==== 1. ...
- 线程异常:undefined reference to 'pthread_create' 处理
源代码: #include <stdio.h> #include <pthread.h> #include <sched.h> void *producter_f ...
- Java第三周学习日记
Day01 1.线程 进程:进程就是正在运行的应用程序.进程负责了内存空间的划分. 线程:一个进程中的代码是由线程去执行的,线程也就是其中一个执行路径. 多线程:一个进程中有多个线程可以同时执行任务. ...
- samba后台进程及安全模式简介
识别 Samba 后台程序Linux 服务器通常作为守护程序(daemon) 来实现,这一词源于希腊神话,其中守护神(daemon)是超自然生物.Linux 守护程序在后台运行以便执行一些有用的任务. ...
- 用SNMP协议实现系统信息监控--Windows Server 2008
简单了解: SNMP简单网络管理协议,是一种属于应有层的协议,主要有三个部分组成,被管理部分.代理部分和网络管理系统. 被管理部分是一个网络节点,也称为网络单元.SNMP代理是被管理设备上的一个网络管 ...
- 配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写. 错误如图: 错误原因: 部署网站时,使用的应用程序池版本不对 ...
- java 中解析xml的技术
最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...
- hdu4006 优先队列
A - 签到 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65768KB 64bit I ...
- CI框架uri去掉index.php
CI框架的入口是index.php,所以url实际上要多出一个index.php,非常不美观.我使用的是apache服务器,要开启mod_rewrite服务才可以. sudo a2enmod rewr ...