Python是一门简单易学,而且非常强大的语言。但是Python有一个致命的问题就是速度慢。看下面两个人在争论:01.Trick1列表中的计数性能:第二种计数方式比第一种快6290倍。为什么是因为Python的原生内置函数都是优化过的,所以在可以使用原生计算的时候,尽量使用原生函数进行计算。02.Trick2列表过滤性能:第二种方法比第一种方法慢近50%。有些人可能认为过滤器应该更快。事实上,过滤器增加了复杂性。它返回一个迭代对象,然后使用列表将其转换为列表,因此成本较高。其实最快的就是推导列表,比第一个快了近30%。03.第三招善用异常,事半功倍。性能:第二种方法比第一种方法快近三倍。直接使用异常简单粗暴,而第一种方法会先通过内置函数hasattr查找内部类的属性,增加开销。04.Trick4检查列表成员的性能:第二种方法比第一种方法快两倍。使用in方法直接查看列表内部成员比通过列表快很多。当然,如果你的num在列表的头部,查找会更快!05.Trick5去重性能:第二个比第一个快了近400倍,所以你可以用原来内置的数据结构,那肯定要用原来的。不过相信大部分同学已经开始使用set来进行去重了。06.技巧六列表排序性能:第二个比第一个快近6倍,sorted函数会对原列表进行排序然后返回一个新的列表,sort函数直接在原列表上排序,节省高架。07.Trick7将迭代循环放入函数中性能:第二种比第一种快20%以上,因为重复循环直接放在一个一次性的插件函数中,需要调用1000子函数的开销要少得多。08.Trick8检查是否为True性能:最快的是第三种(直接用if)比第一种快60%,不需要用==和is判断。因为==会调用内置的魔法函数__eq__来比较左右两边的类型,直接用if判断var是否为空,None,空列表,字典会快很多。09.Trick9检查列表是否为空性能:第三个最快,第三个比第一个快3倍;其实初学者大多喜欢用len来判断,其实我也是,这个习惯需要改掉。10.最后一招的表现:没有比较就没有坏处,因为Python中一切都是对象,所以用list()生成对象的时候会有开销,而[]直接返回一个列表,这会快很多,dict也是一样的。大家可以反省一下自己的代码中是否包含了上述tricks的代码,回过头来进行优化,对自己的性能会有很大的提升。或者菜鸟也可以直接背下来,说不定面试的时候就装高手了。
