# 判断某个元素用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