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

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. 安装centos6.5

    我是在虚拟机上面安装的centos6.5,本机的系统是windows 2008 datacenter. 到这个地方下载镜像文件:http://mirrors.sohu.com/centos/6.5/i ...

  2. 找不同diff-打补丁patch

    Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,“稳”是重中之重,所以不能动不动就是换系统或是换这换那 ...

  3. jekins构建通知邮件配置及邮件附件设置,jenkins构建通知邮件没有RF的log和report文件

    全局配置: 系统管理-系统设置-Extended E-mail Notification (本邮件是程序自动下发的,请勿回复!)<br/><br/>项目名称:$PROJECT_ ...

  4. [XPath] XPath 与 lxml (五)XPath 实例

    本文继续沿用第三章的 XML 示例文档. 选取价格高于30的 price 节点 # 从父节点进行筛选 >>> root.xpath('//book[price>30]/pric ...

  5. [XPath] XPath 与 lxml (二)XPath 语法

    XPath 选取节点时使用的表达式是一种路径表达式.节点是通过路径(path)或者步(steps)来选取的. 本章使用以下 XML 文档作为示例. <?xml version="1.0 ...

  6. smarty模板文件书写javascript代码

    在smarty文件里直接写javascript代码时候,造成500错误. javascript代码有很多的{}在同一行,而{}也是smarty引擎解析模板的关键标识符,smarty将对其进行分析,这时 ...

  7. 当本机通过代理服务器上网时,本机无法打开在本机上的虚拟机(oracle vm)linux系统上的网站,但是局域网里的其他机器却可以打开

    当本机通过代理服务器上网时,本机无法打开在本机上的虚拟机(oracle vm)linux系统上的网站,但是局域网里的其他机器却可以打开. 只有取消代理,本机才能访问其虚拟机linux系统上的网站

  8. windows7内核分析之x86&x64第二章系统调用

    windows7内核分析之x86&x64第二章系统调用 2.1内核与系统调用 上节讲到进入内核五种方式 其中一种就是 系统调用 syscall/sysenter或者int 2e(在 64 位环 ...

  9. C语言变量的存储布局

    分析以下代码中变量存储空间如何分配: //MemSeg.c: 代码无意义,仅供分析用 #include <stdio.h> #include <stdlib.h> //mall ...

  10. Git学习之Git检出

    ================================================ HEAD 的重置即检出 ======================================= ...