基础补充1——collections模块
命名元组另一个用途就是作为字典的替代,因为字典存储需要更多的内存空间。如果你需要构建一个非常大的包含字典的数据结构,那么使用命名元组会更加高效。但 是需要注意的是,不像字典那样,一个命名元组是不可更改的。
1 from collections import namedtuple 2 3 records=[ 4 5 ('mac',2,20000), 6 7 ('lenovo',1,3000), 8 9 ('apple',0,10), 10 11 ('tesla',10,10000000) 12 13 ] 14 15 cost=0.0 16 17 for re in records: 18 19 cost+=re[1]*re[2] 20 21 print('商品:%s 购买个数:%s 总价:%s'%(re[0],re[2],cost)) 22 23 sk=namedtuple('Stock',['name','count','price']) 24 25 for re in records: 26 27 s=sk(*re) 28 29 print(s.count,s.price) 30 31 p=namedtuple('People',['name','gender','age']) 32 33 l=['5537','female',18] 34 35 p1=p(*l) 36 37 print(p1) 38 39 print(p1.name) 40 41 print(p1.gender) 42 43 print(p1.age) 44 45 #p1.name='karla'#报错,不可修改 46 47 p1=p1._replace(name='karla')#需要重新赋值给p1 48 49 print(p1.name) 50 51 #重新设置一个函数,弥补只能使用_replace修改的缺点 52 53 p=namedtuple('People',['name','gender','age']) 54 55 p1=p('','',None) 56 57 def dic_to_stock(s): 58 59 return p1._replace(**s) 60 61 print(dic_to_stock({'name':'karla','gender':'female','age':18})) 62 63 print(dic_to_stock({'name':'lily','gender':'male','age':30}))
基础补充2——从字典中提取子集
1 prices={ 2 3 'ss':48.78, 4 5 'gg':47.5, 6 7 'll':55.3, 8 9 'zz':66 10 11 } 12 13 prices_new={key:val for key,val in prices.items() if val>50} 14 15 print(prices_new)
基础补充4——带参数的装饰器
1 name='karla'
2 pwd='root'
3
4 def auth(auth_type):
5 def inner_auth(func):
6 def wrapper(*args,**kwargs):
7 username=input('username:').strip()
8 password=input('password:').strip()
9 if auth_type=='local':
10 if username==name and password==pwd:
11 print('user login successful')
12 return func(*args,**kwargs)
13 else:
14 exit('log err')
15 elif auth_type=='ldap':
16 print('ladp是啥呀')
17 return wrapper
18 return inner_auth
19
20 def index():
21 print('welcome to index page')
22
23 @auth(auth_type='local')
24 def home():
25 print('welcome to home page')
26
27 @auth(auth_type='ladp')
28 def bbs():
29 print('welcome to bbs page')
30
31 index()
32 home()
33 bbs()
基础补充5——生成器并行运算
1 import time 2 3 def consumer(name): 4 print('[%s]准备吃包子啦'%name) 5 while True: 6 baozi=yield 7 print('包子[%s]来啦,被[%s]吃啦 '%(baozi,name)) 8 9 def producter(): 10 c1=consumer('Karla') 11 c2=consumer('Cindy') 12 c1.__next__() 13 c2.__next__() 14 print('开始做包子啦') 15 for i in range(10): 16 time.sleep(1) 17 c1.send(i) 18 c2.send(i) 19 20 producter() 21 22 f=open('xx.log') 23 f.__next__()