pythonic operations

变量交换
>>> a, b = b, a
循环遍历区间元素
>>>for i in range(10):
...    print (i)
返回的是生成器对象,生成器比列表更加节省内存

带索引位置的循环遍历
>>>colors = ['red', 'green', 'blue', 'yellow']

>>>for i, color in enumerate(colors):
...    print (i, 'mapping', color)
字符串连接
>>>colors = ['red', 'green', 'blue', 'yellow']
>>>print( ', ', join( colors ) )
join 是一种更加高效的字符串连接方式,使用 + 操作时,每执行一次+操作就会导致在内存中生成一个新的字符串对象,遍历几次有几个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。

打开/关闭文件
 >>>with open('data.txt') as f:
 ...   data = f.read()
列表推导式
 result = []
for i in range( 10 ):
    s = i * 2
    result.append( s )

应该写成:

[ i * 2 for i in range( 10 ) ]
1
装饰器

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

def web_lookup(url, saved={}):
    if url in saved:
        return saved[url]
    page = urllib.urlopen(url).read()
    saved[url] = page
    return page

pythonic

import urllib.request

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

names = ['raymond', 'rachel', 'matthew', 'roger',
         'betty', 'melissa', 'judith', 'charlie']
names.pop(0)
names.insert(0, 'mark')
pythonic

from collections import deque
names = deque(['raymond', 'rachel', 'matthew', 'roger',
               'betty', 'melissa', 'judith', 'charlie'])
names.popleft()
names.appendleft('mark')
deque 是一个双向队列的数据结构,删除元素和插入元素会很快

序列解包
p = 'vttalk', 'female', 30, '[email protected]'

name = p[0]
gender = p[1]
age = p[2]
email = p[3]
pythonic

name, gender, age, email = p

猜你喜欢

转载自www.cnblogs.com/suanec/p/9004191.html
今日推荐