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

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. 【Ubuntu】Windows 远程桌面连接ubuntu及xrdp的一些小问题(远程桌面闪退、连接失败、tab补全功能,无菜单栏,error - problem connecting )【转】

    转:https://blog.csdn.net/u014447845/article/details/80291678 1.远程桌面闪退,shell可以用的问题:(1)需要在该用户目录创建一个.xse ...

  2. 【代码审计】711cms_V1.0.5 目录遍历漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  3. 【代码审计】iZhanCMS_v2.1 后台存在多个SQL注入漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  4. Django 数据传递

    在前面的访问数据库中,我们是这样来插入数据的: [root@localhost web]$ cat web/urls.py urlpatterns = patterns('', .... url(r' ...

  5. [C/E] 等差数列求和

    题目:要求给定一个整数 N,求从 0 到 N 之间所有整数相加之和. 解1:使用 for 循环依次递加. #include <stdio.h> int main(void){ int x; ...

  6. DRBD架构详解(原创)

    DRBD概述Distributed Replicated Block Device(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像.DR ...

  7. ajax劫持?

    <html<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=ut ...

  8. Bootstrap学习总结笔记(24)-- 基于BootstrapValidator的Form表单验证

    Form表单进行数据验证是十分必要的,我们可以自己写JS脚本或者使用JQuery Validate 插件来实现.对于Bootstrap而言,利用BootstrapValidator来做Form表单验证 ...

  9. Material Design系列第四篇——Defining Shadows and Clipping Views

    Defining Shadows and Clipping Views This lesson teaches you to Assign Elevation to Your Views Custom ...

  10. 【大数据系列】hadoop核心组件-MapReduce

    一.引入 hadoop的分布式计算框架(MapReduce是离线计算框架) 二.MapReduce设计理念 移动计算,而不是移动数据. Input HDFS先进行处理切成数据块(split)   ma ...