Python这样写更高效

  • 1.变量交换
a, b = b, a
  • 2.循环遍历区间元素
for i in xrange(6):
    print i2

xrange 返回的是生成器对象,生成器比列表更加节省内存,不过需要注意的是 xrange 是 python2 中的写法,python3 只有 range 方法,特点和 xrange 是一样的。

  • 3.带有索引位置的集合遍历
for i, color in enumerate(colors):
    print i, '--->', color
  • 4.字符创连接
print ', '.join(names)

join 是一种更加高效的字符串连接方式,使用 + 操作时,每执行一次+操作就会导致在内存中生成一个新的字符串对象,遍历8次有8个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。

  • 5.列表推导式
[i2 for i in xrange(10)]
  • 6.善用装饰器
def web_lookup(url, saved={}):
    if url in saved:
        return saved[url]
    page = urllib.urlopen(url).read()
    saved[url] = page
    return page


#  以上部分是不使用装饰器的代码示例,装饰器代码从这里开始

import urllib #py2
#import urllib.request as urllib # py3

def cache(func):
    saved = {}

    def wrapper(url):
        if url in saved:
            return saved[url]
        else:
            page = func(url)
            saved[url] = page
            return page

    return wrapper

@cache
def web_lookup(url):
    return urllib.urlopen(url).read()

装饰器可以把与业务逻辑无关的代码抽离出来,让代码保持干净清爽,而且装饰器还能被多个地方重复利用。比如一个爬虫网页的函数,如果该 URL 曾经被爬过就直接从缓存中获取,否则爬下来之后加入到缓存,防止后续重复爬取。

用装饰器写代码表面上感觉代码量更多,但是它把缓存相关的逻辑抽离出来了,可以给更多的函数调用,这样总的代码量就会少很多,而且业务方法看起来简洁了。

  • 7.合理使用列表

列表对象(list)是一个查询效率高于更新操作的数据结构,比如删除一个元素和插入一个元素时执行效率就非常低,因为还要对剩下的元素进行移动

deque 是一个双向队列的数据结构,删除元素和插入元素会很快

from collections import deque
names = deque(['raymond', 'rachel', 'matthew', 'roger',
               'betty', 'melissa', 'judith', 'charlie'])
names.popleft()
names.appendleft('mark')
  • 8.序列解包
p = 'vttalk', 'female', 30, 'python@qq.com'

name, gender, age, email = p
  • 9.遍历字典
for k, v in d.iteritems():
    print k, '--->', v

iteritems 返回迭代器对象,可节省更多的内存,不过在 python3 中没有该方法了,只有 items 方法,等值于 iteritems。

  •  10.打开文件
with open("xx.txt") as f:
    f.read()

文件在结束时会自动关闭

posted on 2017-08-15 15:58  实心大白菜  阅读(158)  评论(0编辑  收藏  举报

导航