基础补充练习

基础补充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__()
原文地址:https://www.cnblogs.com/qiaoqianshitou/p/9152606.html