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

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. ios开发之--解决“Could not insert new outlet connection”的问题。

    在Xcode中,我们能够在StoryBoard编辑界面或者是xib编辑界面中通过“Control键+拖拽“的方式将某个界面元素和相应的代码文件连接起来.在代码文件里创建outlet. 只是.假设你的运 ...

  2. sql 替换字符串

    MSSQL替换语句: )),'abc.com','123.com') 例如: update PE_Article set Content=replace(cast(Content as varchar ...

  3. IIS URL Rewrite Module的防盗链规则设置

    IIS版本:IIS 7.5 URL Rewrite组件:IIS URL Rewrite Module(http://www.iis.net/downloads/microsoft/url-rewrit ...

  4. SpringBoot(九)-- SpringBoot JDBC

    1.属性配置文件(application.properties) # type 可以修改连接池类型,默认采用Tomcat的连接池 # spring.datasource.type=com.alibab ...

  5. 给TextView加上多彩效果:改变部分字体的大小和颜色

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18363899 前言 在实际使用中,有时候会遇到特殊需求,比如pm突发奇想,想 ...

  6. C语言中如何计算时间差

    #include <time.h>   #include <stdio.h>   int main()   {       time_t start ,end ;        ...

  7. 怎么安装WinXP和Win7双系统

    本文介绍一下如何安装Windows XP和Windows 7双系统以及启动菜单问题的常用修复方法,推荐安装win7和xp双系统时最好采用从低版本到高版本的顺序进行,一般是XP下安装win7,另本文已假 ...

  8. Twitter的SnowFlake分布式id生成算法

    二进制相关知识回顾 1.所有的数据都是以二进制的形式存储在硬盘上.对于一个字节的8位到底是什么类型 计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块. ...

  9. 【大数据系列】hadoop命令指导官方文档翻译

    Hadoop Commands Guide Overview Shell Options Generic Options User Commands archive checknative class ...

  10. javaweb基础 02--javaweb基础概念

    1.WEB资源 * 静态web资源:指web页面中供人们浏览的数据始终是不变(如 html 页面). * 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内 ...