python 优化知识点

# 判断某个元素用set速度高于list

data = (i**2 +1 for i in range(100000))

a = set(data)

b = list(data)


# python 性能提升技巧1

list_A = [2*i -1 for i in range(100)]

list_B = [i*2 for i in list_A]

dict_AB = dict(zip(list_A,list_B))

list_A[list_B.index(22)]

dict_AB.get(22,None) # 字典的索引效率高于列表


# python 性能提升技巧2

total = sum(range(1000 + 1)) # 返回的是一个数组

total = sum(xrange(1000 + 1)) # 返回的是一个迭代器对象,相比range更加的节省内存,运行效率更高



# 对于某些代码只需要进行初始化运行就可以,二次运行直接查找,省去不必要的资源开销
class lazy(object):
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, cls):
        val = self.func(instance)
        setattr(instance, self.func.__name__, val)
        return val

class Circle(object):
    def __init__(self):
        self.sass = dict()
    @lazy
    def area(self):
        # 这里只会执行一次,可以有效防止每次调用都进行sql的查询
        print 'evalute'  
        sql = 'select * from t_ch where status=0'
        rows = db.SQL_DW(sql)
        for row in rows:
            self.sass[row['saas_id']] = row['company_name']
        return self.sass

c = Circle()
print c.area
ss = c.area
print ss[7000001]
print c.area
aa = c.area
print aa[7000001]
print c.area


# 导入包 from itertools import *
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
def filter_odd_numbers(num):
    if num % 2 == 0:
        return True
    else:
        return False
filtered_numbers = filter(filter_odd_numbers, numbers)
print(filtered_numbers) 

#打印结果 [2, 4, 6, 8, 10, 12, 14]


for i in izip(count(1), ['Bob', 'Emily', 'Joe','Joe']):
    print i

# 打印结果,拼接成元组
#(1, 'Bob')
#(2, 'Emily')
#(3, 'Joe')
#(4, 'Joe')




from cachetools import cached
# 第二种缓存方式
@cached(cache={})
def fun(key):
    a = {'name':'python','age':18,'gender':'man'}
    b = a.get(key)
    print 66666666
    print a
    if b is None:
        a[key] = 'seart'
        return a[key]
    else:
        return a[key]

if __name__ == '__main__':
    for i in range(4):
        print fun('age') # 下面每一个键第一次获取时都会运行上面的代码,第二次调用才开始使用缓存
        print fun('name')
        print fun('name111')

66666666
{'gender': 'man', 'age': 18, 'name': 'python'}
18
66666666
{'gender': 'man', 'age': 18, 'name': 'python'}
python
66666666
{'gender': 'man', 'age': 18, 'name': 'python'}
seart
18
python
seart
18
python
seart
18
python
seart




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值