,==============坑=======

1、可变类型的值不要作为函数参数默认值,应该是不可变的对象,如None,True,False,数字或字符串

2、小心+=

a = range(10) b = range(5) a_orig = a a += b print a print a_orig    # a_orig在以上处理过程中取值被改变了。
a = range(10) b = range(5) a_orig = a a = a + b print a print a_orig    # a_orig还是原来的值,没有变。

3、range (10000000)后,内存不释放的原因:python对整数对象做了缓存,新创建出来的整数对象的内存不会被释放,而是留着以后再次创建整数对象时继续使用。这样可以减少new操作,提高效率。range (10000000)会同时创建大约10000000个整数对象,这些内存都不会释放给系统。

=========性能=======

1、xrange的性能、内存占用都比range好(range返回的是list,xrange返回的是迭代对象,省内存,在每次迭代时,根据步长计算出下一个值,内存占用少,性能比较好

2、局部变量的访问速度,比全局变量、内建变量都要快,如果函数中,需要频繁使用某个全局变量或内建函数时,那么可以考虑先将这个全局变量或内建函数赋值给一个局部变量,后面代码直接访问这个局部变量

3、,比自己for要效率高

4、

5、虽然python是动态语言,但是在执行python代码前,也有编译的过程。平时大家看到的pyc文件就是python编译后的结果

6、当代码中需要使用不需要改变的序列时,应该采用tuple,而不是list; 用tuple效率更高

7、创建一个list:

法一:

result = []

for item in src:

if item%2 == 0:

result.append(item)

由于python是动态语言,python运行到result.append(item)代码时,它并不知道这里是调用了list的append方法,它只能是按照通用的方式来执行:

1)        加载变量result

2)        找到变量result的名称为"append"的方法

3)        执行该方法

//////////////////////////////////////

法二:法二比法一更快

result = [item for item in src if (item%2)==0]

我们已经通过result = [item for item in...]的方式让python在编译期间就知道这里是够造一个list,所以python在运行期间就直接调用了append方法,省去了查找名称为“append”函数的过程

8、合并两个list,用extend比append要快

每当append元素时,list发现当前数组的大小不够用时,会resize内存。所以append()会导致多次重分配内存,影响了性能。而list在执行+操作时,会事先算好需要的内存大小,并一次性调整好。

法一:

tmp = []

for item in src:

tmp.append(item)

法二:

tmp = []

tmp+=src   #or tmp.extend(src)

9、判断字符串是否已***开头

src_str.find(sub_str) 性能最差;  src_str.startswith(sub_str) 性能中等;  src_str[:len(sub_str)] == sub_str 性能最好。综合来看,推荐src_str.startswith(sub_str),因为其可读性要比其他二者要好

10、xx is None的性能比xx == None的性能好

a is b,其实只是比较a和b的内存地址是否相同,如果a和b的地址相同,那么a和b必然是同一个对象。a == b,首先会比较a和b的地址是否相同,如果地址相同,则直接返回True了,如果地址不同,则会继续比较a和b的内容,所以比 a is b要慢。

python中None、False、True是存放在唯一的一个内存中,只有在地址相同的情况下,才会等于None、False、True,所以可以使用is代替==。类、函数变量也可以如此。其他情况不能使用is 代替==

11、需要被频繁运行的代码部分,尽量不要使用exec,因为exec中传入的代码是无法事先经过编译的,只能在每次运行到exec时临时编译成python指令,性能非常低。

如果exec中仅仅给某个变量赋值,那么可以使用eval代替(eval性能也不高,但是比exec要好一点)

12、import只能导入模块,不能导入模块中的对象(类、函数、变量等),如果想只导入特定的类、函数、变量则用from A import getName即可

python的几个注意事项的更多相关文章

  1. 【python】继承时注意事项

    1. __init__ 注意事项 如果父类有__init__函数,子类没有,则子类自动调用父类__init__函数 如果父类有__init__函数,子类也有,则子类必须主动调用父类__init__函数 ...

  2. python 文件操作的注意事项

    我们经常用python读取文件信息,这里有些注意事项 with open('test.txt', 'r') as f: print 'f.read', f.read() with open('test ...

  3. Python笔记——break的注意事项

    在python中有个控制流的语句:break 它是用来终止循环语句的,不管此时循环体进行到哪,只要碰到break都停止执行循环语句. 1.举例脚本: #!/usr/bin/env python for ...

  4. 用Python抓网页的注意事项

    用Python编一个抓网页的程序是非常快的,下面就是一个例子: import urllib2 html = urllib2.urlopen('http://blog.raphaelzhang.com' ...

  5. python安装插件包注意事项

    注意!注意!注意!安装以来lib库时强烈建议使用pip安装:原因:nu1:用exe安装会出现各种意想不到让您惊讶的错误!!!nu2:这种错误很难解决且花费无用功!!! 使用pip安装: nu1:使用. ...

  6. python中除法的注意事项

    使用python数据处理,代码如下: import numpy as np fs = 5 ts = np.arange(-1,1+1/fs,1/fs) 发现了这样一个错误: Traceback (mo ...

  7. Python——模块以及导入注意事项

    在Python中,每一个文件都应该是可以被导入的. 每一个独立的python文件都是一个模块 在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍. 而在实际应用时,每个模块都是有专人负责独立开发 ...

  8. Python中for else注意事项

    假设有如下代码: for i in range(10): if i == 5: print 'found it! i = %s' % i else: print 'not found it ...' ...

  9. python解释器下载及注意事项

    python解释器 python解释器下载 python解释器下载官网:https://www.python.org/downloads/windows/ 目前比较常用的python版本有python ...

随机推荐

  1. java中类相关注意事项

    下面default类就是默认修饰符的类 1.Java中调用类中属性或方法(不管是否静态属性或方法)都要在类的方法中调用,虽然这个太基础,但今天想在类中调用静态类的静态变量,不能调用: 2.Java调用 ...

  2. java命令启动jar包

    本人对这些命令也是一知半解,记录备用. 1. 使用java命令行执行java文件 # 设置命令窗口标题 title test1 # 开启输出 @echo on # 设置环境变量JAVA_HOME se ...

  3. MongoDB 备份恢复

    备份: mongodump --host -u admin -p -o /tmp/alldb/ // 备份所有的库 mongodump --host -u admin -p -d mydb -o /t ...

  4. Mock

    转移到  这里 像测试对象提供一套和测试资源完全相同 的接口和方法,不关心过程,只关心结果(比如模拟拿到服务器的code)

  5. C++中成员初始化列表的使用

    C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point{private: int x,y;public ...

  6. C# mvc 500 内部服务器访问异常

    20161018 项目发布到IIS上后,无法访问,由于页面默认跳转到异常处理去了,所以详细信息一直查看不了. 在找寻无果,异常信息日志记录无效的情况下,只好一点点来测试了 在异常处理前,就已经试过,a ...

  7. Delphi应用程序的调试(六)步进式代码调试

    步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...

  8. jQuery事件处理(四)

    看了几天,决定整理一下jQuery事件处理的整体设计思路 1.通过add方法给选中的元素注册事件处理程序(通过缓存系统将事件储存到cache,而不是绑定到元素上) a.在存储之前,会为事件处理程序增加 ...

  9. SharpGL学习笔记(十) 常见的光源类型,创建光源

    在OpenGL中,使用光源的特性组合,如颜色,位置,方向等等,可以创建多种不同类型的灯光. 常见的几种灯光类型有: 定向光源(directonal) 定位光源(positional) 衰减光源 聚光灯 ...

  10. php sqlserver及xdebug扩展配置

    ;extension=php_bz2.dllextension=php_curl.dll;extension=php_fileinfo.dll;extension=php_ftp.dll;extens ...