1. '''
  2. 不可变:数字,字符串,元组
  3. 可变:列表,字典
  4.  
  5. 原子:数字,字符串
  6. 容器:列表,元组,字典
  7.  
  8. 直接访问:数字
  9. 顺序:字符串,列表,元组
  10. 映射访问:字典
  11.  
  12. '''
  13.  
  14. #一一对应
  15. a,b,c,d,e='hello'
  16. print(e,d)
  17.  
  18. #少一个报错
  19. # a,b,c='hello'
  20.  
  21. #*号的使用
  22. a,*_,e='hello'
  23. print(a,e)
  24.  
  25. #列表中的元素解压也是一一对应的关系
  26. data=['mac',10000,[2016,10,12]]
  27. name,price,date=data
  28. print(name,price,date)
  29.  
  30. #截取子元素
  31. name,price,[year,month,day]=data
  32. print(name,price,year,month,day)
  33.  
  34. #无用的元素用_代替
  35. data=['mac',10000,[2016,10,12]]
  36. _,price,_=data
  37. print(price)
  38.  
  39. #头截取,尾截取
  40. record=['lhf','male',18,'12345@qq.com','']
  41. *_,phone=record
  42. name,*_=record
  43. print(phone)
  44. print(name)
  45.  
  46. #解压可迭代对象赋值给多个值
  47. #一个八个月的业绩与前七个月的平均值比较
  48.  
  49. sales_record=[11,12,3,7,9,6,3,5]
  50. *head,tail=sales_record
  51. print(head,tail)
  52. print(sum(head)/len(head))
  53. if tail > sum(head)/len(head):
  54. print('第八个月业绩高于前七个月平均值')
  55. elif tail == sum(head)/len(head):
  56. print('第八个月业绩等于前七个月平均值')
  57. else:
  58. print('第八个月业绩小于前七个月平均值')
  59.  
  60. #解压元素在函数中的应用
  61.  
  62. records=[
  63. ('say_hi','hello'),
  64. ('calculate',10,20,30,40),
  65. ('dic_handle','name','lhf')
  66. ]
  67.  
  68. def say_hi(msg):
  69. print(msg)
  70.  
  71. def calculate(l):
  72. res=0
  73. for i in l:
  74. res+=i
  75. print(res)
  76.  
  77. def dic_handle(l):
  78. key,val=l
  79. dic={key:val}
  80. print(dic)
  81.  
  82. for func,*args in records:
  83. if func == 'say_hi':
  84. say_hi(args)
  85. elif func == 'calculate':
  86. calculate(args)
  87. elif func == 'dic_handle':
  88. dic_handle(args)
  89.  
  90. #linux系统中用户记录
  91. record='root:x:0:0:super user:/root:/bin/bash'
  92. *head,home_dir,_=record.split(':')
  93. print('家目录',home_dir)
  94.  
  95. 解压序列赋值给多个变量

解压序列赋值给多个变量

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. from collections import deque
  4.  
  5. # #实现队列,不指定大小则无限添加
  6. # d=deque(maxlen=3)
  7. # d.append(1)
  8. # d.append(2)
  9. # d.append(3)
  10. # print(d)
  11. # d.append(4)
  12. # print(d)
  13. # d.appendleft(5)
  14. # print(d)
  15. # print(d.pop())
  16. # print(d.popleft())
  17.  
  18. def search(file,pattern,max_len=5):
  19. pre_lines=deque(maxlen=max_len)
  20. for line in file:
  21. if pattern in line:
  22. yield pre_lines,line
  23. pre_lines.append(line)
  24.  
  25. if __name__ == '__main__':
  26. with open('测试文件') as file:
  27. for pre_l,line in search(file,'Exchange'):
  28. print('-'*60)
  29. for i in pre_l:
  30. print(i)
  31. print('匹配行----->',line)
  32.  
  33. 保留最后n个元素

保留最后n个元素

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. import heapq
  5.  
  6. nums=[1,2,3,-10,100,30,200,21,9,7]
  7. print(heapq.nlargest(3,nums))
  8. print(heapq.nsmallest(3,nums))
  9.  
  10. portfolio=[
  11. {'name':'IBM','shares':100,'price':91.1},
  12. {'name':'AAPL','shares':50,'price':532.1},
  13. {'name':'FB','shares':200,'price':21.01},
  14. {'name':'HPQ','shares':35,'price':32.75},
  15. {'name':'YHOO','shares':45,'price':16.35},
  16. {'name':'ACME','shares':75,'price':115.65}
  17. ]
  18.  
  19. cheap=heapq.nsmallest(3,portfolio,key=lambda x:x['price'])
  20. print(cheap)
  21.  
  22. '''
  23. 如果你想在一个集合中查找最小或最大的N个元素,
  24. 并且N小于集合元素数量, 那么这些函数提供了很好的性能。
  25. 因为在底层实现里面,首先会先将集合数据进行堆
  26. 排序后放入一个列表中
  27. '''
  28.  
  29. heapq.heapify(nums)
  30. print(nums)
  31. '''
  32. 堆数据结构最重要的特征是heap[0]永远是最小的元素。
  33. 并且剩余的元素可以很 容易的通过调用heap.heappop()方法得到,
  34. 该方法会先将第一个元素弹出来,然后 用下一个最小的元素来取代被弹出元素
  35. (这种操作时间复杂度仅仅是O(log N),N是堆大小。)比如,如果想要查找最小的3个元素,
  36. 你可以这样做:
  37. '''
  38. print(heapq.heappop(nums))
  39. print(heapq.heappop(nums))
  40. print(heapq.heappop(nums))
  41.  
  42. '''
  43. nlarges(),nsmallest():当要查找的元素个数相对较小时使用
  44. min(),max():就是要找唯一一个最大的或者最小的值时使用
  45. sort[items][n:m]:当要查找的元素个数相接近items长度时使用
  46. '''
  47.  
  48. 查找最大或最小的n个元素

查找最大或最小的n个元素

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. import heapq
  4.  
  5. class PriotryQueue:
  6. def __init__(self):
  7. self._queue=[]
  8. self._index=0
  9.  
  10. def push(self,item,priotry):
  11. heapq.heappush(self._queue,(-priotry,self._index,item))
  12. self._index+=1
  13.  
  14. def pop(self):
  15. return heapq.heappop(self._queue)[-1]
  16.  
  17. class Item:
  18. def __init__(self,name):
  19. self.name=name
  20.  
  21. def __str__(self):
  22. return self.name
  23.  
  24. def __repr__(self):
  25. # return self.name
  26. return 'Item({!r})'.format(self.name)
  27. q=PriotryQueue()
  28. q.push(Item('镇长'),1)
  29. q.push(Item('省长'),4)
  30. q.push(Item('主席'),5)
  31. q.push(Item('市长'),3)
  32. q.push(Item('县长'),2)
  33.  
  34. print(q._queue)
  35.  
  36. print(q.pop())
  37. print(q.pop())
  38. print(q.pop())
  39. print(q.pop())
  40. print(q.pop())
  41.  
  42. 基于heapq实现优先级队列

基于heapq实现优先级队列

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. '''
  5. 一个字典就是一个键对应一个单值的映射。
  6. 如果你想要一个键映射多个值,那么你就需
  7. 要将这多个值放到另外的容器中,比如列表
  8. 或者集合里面。比如,你可以像下面 这样构造这样的字典:
  9. '''
  10.  
  11. people={
  12. 'name':['alex','李杰'],
  13. 'hobby':['play','coding']
  14. }
  15.  
  16. project={
  17. 'company':{'IBM':'CTO','Lenovo':'CEO','baidu':'COO','Alibaba':'UFO'},
  18. 'applicant':['小白','lhf','武藤兰']
  19. }
  20.  
  21. '''
  22. 选择使用列表还是集合取决于你的实际需求。
  23. 如果你想保持元素的插入顺序就应该使用列表,
  24. 如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。
  25. 你可以很方便的使用collections模块中的defaultdict来构造这样的字典。 的一个特征是它会自动初始化每个 刚开始对应的值,所以你只需要 关注添加元素操作了。比如:
  26. '''
  27. from collections import defaultdict
  28. d=defaultdict(list)
  29. d['teacher'].append('alex')
  30. d['teacher'].append('wupeiqi')
  31. d['teacher'].append('wuqiqi')
  32. d['boss'].append('oldboy')
  33. d['boss'].append('alex')
  34.  
  35. d_set=defaultdict(set)
  36. d_set['a'].add(1)
  37. d_set['a'].add(2)
  38. d_set['a'].add(3)
  39.  
  40. print(d,d_set)
  41.  
  42. #setdefault
  43. d={}
  44.  
  45. d.setdefault('a',[]).append(1)
  46. d.setdefault('a',[]).append(2)
  47. d.setdefault('a',[]).append(2)
  48. print(d)
  49.  
  50. #自己实现一个一键多值字典
  51. l=[
  52. ('teacher','alex'),
  53. ('teacher','lhf'),
  54. ('teacher','papa'),
  55. ('boss','alex'),
  56. ('boss','wupeiqi'),
  57. ]
  58. d={}
  59. for k,v in l:
  60. if k not in d:
  61. d[k]=[]
  62. d[k].append(v)
  63. print(d)
  64.  
  65. #用defaultdict实现,更优雅
  66. d=defaultdict(list)
  67. for k,v in l:
  68. d[k].append(v)
  69.  
  70. print(d)
  71.  
  72. 实现一个multidict

实现一个multidict

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. from collections import OrderedDict
  5. d=OrderedDict()
  6. d['dream1']='先挣他妈一个亿'
  7. d['dream2']='然后周游全世界'
  8. d['dream3']='再娶他妈七八个媳妇'
  9. d['dream4']='洗洗脸,然后梦就醒了'
  10.  
  11. for key in d:
  12. print(key,d[key])
  13.  
  14. # import json
  15. # print(json.dumps(d))
  16.  
  17. '''
  18. OrderedDict内部维护着一个根据键插入顺序排序的双向链表每次当一个新的元素
  19. 插入进来的时候,它会被放到链表的尾部对于一个已经存在的键的重复赋值不会改变
  20. 键的顺序。需要注意的是,一个OrderedDict的大小是一个普通字典的两倍,因为它
  21. 内部维 护着另外一个链表。所以如果你要构建一个需要大量OrderedDict实例的数
  22. 据结构的时候,那么你就得仔细 权衡一下是否使用OrderedDict带来的好处要大过
  23. 额外内存消耗的影响。
  24. '''
  25.  
  26. 创建有序字典

创建有序字典

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. prices={
  4. 'ACME':45.23,
  5. 'AAPL':612.78,
  6. 'IBM':205.55,
  7. 'HPQ':37.20,
  8. 'FB':10.75
  9. }
  10.  
  11. #zip()创建的是只能访问一次的迭代器,下面的max()会报错
  12. # prices_and_names=zip(prices.values(),prices.keys())
  13. # min_price=min(prices_and_names)
  14. # max_price=max(prices_and_names)
  15.  
  16. #单纯的min(prices)是按照key来取值
  17.  
  18. min_price=min(zip(prices.values(),prices.keys()))
  19. max_price=max(zip(prices.values(),prices.keys()))
  20.  
  21. print(min_price)
  22. print(max_price)
  23.  
  24. print(min(prices,key=lambda k:prices[k]))
  25. print(max(prices,key=lambda k:prices[k]))
  26.  
  27. '''
  28. 需要注意的是在计算操作中使用到了(值,键)对。当多个实体
  29. 拥有相同的值的时 候,键会决定返回结果。比如,在执行min()
  30. 和max()操作的时候,如果恰巧最小或 最大值有重复的,那么拥
  31. 有最小或最大键的实体会返回
  32. '''
  33. prices={'A':45.23,'Z':45.23}
  34.  
  35. print(min(zip(prices.values(),prices.keys())))
  36.  
  37. 字典的运算

字典的运算

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. a={
  4. 'x':1,
  5. 'y':2,
  6. 'z':3,
  7. }
  8.  
  9. b={
  10. 'w':1,
  11. 'x':2,
  12. 'y':3,
  13. }
  14.  
  15. print(a.keys() & b.keys())
  16. print(a.keys() - b.keys())
  17. print(a.items() - b.keys())
  18.  
  19. #生成一个新的字典,去掉某些key
  20.  
  21. c={key:a[key] for key in a.keys() - {'z','w'}}
  22. print(c)
  23.  
  24. 查找俩字典的相同点

查找俩字典的相同点

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. a=[1,5,2,1,9,1,5,10]
  5.  
  6. #如果想简单去重,可以使用set,但是set是无序的
  7. # print(set(a))
  8.  
  9. #如果序列的值都是hashable类型,那么可以简单利用集合或者生成器来解决这个问题
  10. def dedupe(items):
  11. seen=set()
  12. for i in items:
  13. if i not in seen:
  14. yield i
  15. seen.add(i)
  16. print(list(dedupe(a)))
  17.  
  18. #如果序列元素是不可hashable类型
  19. a=[
  20. {'name':'alex','age':18},
  21. {'name':'alex','age':100},
  22. {'name':'alex','age':100},
  23. {'name':'lhf','age':18},
  24.  
  25. ]
  26.  
  27. def dedupe(items,key=None):
  28. seen=set()
  29. for i in items:
  30. k=i if not key else key(i)
  31. if k not in seen:
  32. yield i
  33. seen.add(k)
  34. print(list(dedupe(a,key=lambda k:(k['name'],k['age']))))
  35.  
  36. #去除文件中相同的内容用第一种方法即可
  37.  
  38. 去除序列中重复的值且保持顺序

去除序列中重复的值且保持顺序

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. #普通切片,一堆硬编码
  5. record='苍井空'
  6. record1='abcde'
  7. print(record[1:3])
  8. print(record1[1:3])
  9.  
  10. #命名切片,减少硬编码
  11. record='苍井空 18621452550 沙河汇德商厦'
  12. phone=slice(4,15)
  13. addr=slice(16,21)
  14. print(record[phone])
  15. print(record[addr])
  16.  
  17. '''
  18. 一般来讲,代码中如果出现大量的硬编码下标值会使
  19. 得可读性和可维护性大大降 低。比如,如果你回过来
  20. 看看一年前你写的代码,你会摸着脑袋想那时候自己到
  21. 底想 干嘛啊。这里的解决方案是一个很简单的方法让
  22. 你更加清晰的表达代码到底要做什么。内置的slice()
  23. 函数创建了一个切片对象,可以被用在任何切片允许使用
  24. 的地方。
  25. '''
  26.  
  27. s=slice(5,50,2)
  28. print(s.start)
  29. print(s.stop)
  30. print(s.step)
  31.  
  32. 命名切片

命名切片

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. from collections import Counter
  4. words=['if', 'you', 'were', 'a',
  5. 'you,I', 'would', 'never','if',
  6. 'would', 'if']
  7. # d={}
  8. # for word in words:
  9. # if word not in d:
  10. # d[word]=1
  11. # else:
  12. # d[word]+=1
  13. # print(d)
  14.  
  15. word_counts=Counter(words)
  16. # print(word_counts)
  17.  
  18. #统计出现频率最高的3个单词
  19. print(word_counts.most_common(2))
  20.  
  21. #可以像字典一样取值
  22. print(word_counts['if'])
  23.  
  24. #新增单词
  25. more_words=['if','if']
  26. for word in more_words:
  27. word_counts[word]+=1
  28.  
  29. print(word_counts)
  30. #或者直接使用
  31. word_counts.update(more_words)
  32. print(word_counts)
  33.  
  34. #counter实例可以进行数学运算
  35.  
  36. a=Counter(words)
  37. b=Counter(more_words)
  38. print(a)
  39. print(b)
  40. print(a-b)
  41. print(b-a)
  42. print(a+b)
  43.  
  44. Counter统计出现次数最多的元素

Counter统计出现次数最多的元素

  1. 文件conf.txt内容
  2. global
  3. log 127.0.0.1 local2
  4. daemon
  5. maxconn 256
  6. log 127.0.0.1 local2 info
  7. defaults
  8. log global
  9. mode http
  10. timeout connect 5000ms
  11. timeout client 50000ms
  12. timeout server 50000ms
  13. option dontlognull
  14.  
  15. listen stats :8888
  16. stats enable
  17. stats uri /admin
  18. stats auth admin:1234
  19.  
  20. frontend oldboy.org
  21. bind 0.0.0.0:80
  22. option httplog
  23. option httpclose
  24. option forwardfor
  25. log global
  26. acl www hdr_reg(host) -i www.oldboy.org
  27. use_backend www.oldboy.org if www
  28.  
  29. backend www.oldboy.org
  30. server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
  31.  
  32. 原配置文件
  33.  
  34. deque_test.py内容
  35.  
  36. from collections import deque
  37. import re
  38.  
  39. def conf_dic(f):
  40. dic={}
  41. for line in f:
  42. if re.match('[a-zA-Z]',line):
  43. key=line
  44. elif re.match('^ ',line):
  45. dic.setdefault(key,[]).append(line)
  46.  
  47. return dic
  48.  
  49. if __name__ == '__main__':
  50. with open('conf.txt',encoding='utf-8') as f:
  51. dic=conf_dic(f)
  52.  
  53. for i in dic:
  54. print('%s' %i,end='')
  55. for line in dic[i]:
  56. print(line,end='')
  57. print('-'*20)
  58.  
  59. 读取配置文件组成字典

读取配置文件组成字典

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3. from operator import itemgetter
  4.  
  5. rows=[
  6. {'fname':'Brian1','lname':'Jones1','uid':1003},
  7. {'fname':'Brian2','lname':'Jones2','uid':1002},
  8. {'fname':'Brian3','lname':'Jones3','uid':1001},
  9. {'fname':'Brian4','lname':'Jones4','uid':1004},
  10. ]
  11. # rows_by_uid=sorted(rows,key=lambda rows:rows['uid'])
  12. # for i in rows_by_uid:
  13. # print(i)
  14. #
  15. #
  16. #
  17. # rows_by_uid=sorted(rows,key=itemgetter('uid'))
  18. # for i in rows_by_uid:
  19. # print(i)
  20.  
  21. rows_by_lfname=sorted(rows,key=itemgetter('lname','fname'))
  22. print(rows_by_lfname)
  23. for i in rows_by_lfname:
  24. print(i)
  25.  
  26. 字典通过关键字排序

字典通过关键字排序

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3.  
  4. #要生成列表
  5. l=[]
  6. for i in range(6):
  7. i*=2
  8. l.append(i)
  9. print(l)
  10.  
  11. y=[i*2 for i in range(6)]
  12. print(y)
  13.  
  14. def func(n):
  15. return n+10
  16. z=[func(i) for i in range(6)]
  17. print(z)
  18.  
  19. l=[1,2,3,-1,-10,4,5]
  20. #过滤掉负数
  21. l_new=[i for i in l if i >= 0]
  22. print(l_new)
  23.  
  24. 列表解析

列表解析

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3.  
  4. #生成器,取一次生成一个值,只能next不能回退,因为只有一个
  5.  
  6. l=[i for i in range(10000000)] #机器卡死
  7. g=(i for i in range(1000000)) #一秒生成
  8. g.__next__()
  9. #next到最后报异常
  10.  
  11. def fib(n1,n2,count=0):
  12. if count > 10:return
  13. if count == 0:
  14. print('',n1,end='')
  15.  
  16. x=n2
  17. n2=(n1+n2)
  18. n1=x
  19. print(' ',n2,end='')
  20. count+=1
  21. fib(n1,n2,count)
  22.  
  23. #
  24. # 0 1 1 2 3 5 8 13 21
  25.  
  26. # fib(0,1)
  27. #
  28. def fib2(max=10):
  29. n,a,b=0,0,1
  30. while n < max:
  31. # x=b
  32. # b=b+a
  33. # a=x
  34. yield b
  35. a,b=b,a+b
  36. # print(' ',b,end='')
  37.  
  38. n+=1
  39. return 'done'
  40.  
  41. x=fib2()
  42. x.__next__()
  43. x.__next__()
  44. x.__next__()
  45. x.__next__()
  46. x.__next__()
  47. x.__next__()
  48. x.__next__()
  49. x.__next__()
  50. x.__next__()
  51. x.__next__()
  52. x.__next__()
  53. x.__next__()
  54. x.__next__()
  55. x.__next__()
  56. x.__next__()
  57.  
  58. # while True:
  59. # try:
  60. # print(x.__next__())
  61. # except Exception as e:
  62. # print(e)
  63. # break
  64.  
  65. 生成器

生成器

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3. import time
  4.  
  5. def consumer(name):
  6. print('[%s]准备吃包子啦' %name)
  7. while True:
  8. baozi=yield
  9.  
  10. print('包子[%s]来了,被[%s]吃了' %(baozi,name))
  11.  
  12. # c=consumer('alex')
  13. # c.__next__()
  14. # c.send('韭菜馅的')
  15.  
  16. def producter():
  17. c1=consumer('alex')
  18. c2=consumer('wupeiqi')
  19. c1.__next__()
  20. c2.__next__()
  21. print('开始做包子啦')
  22. for i in range(10):
  23. time.sleep(1)
  24. c1.send(i)
  25. c2.send(i)
  26.  
  27. producter()
  28.  
  29. f=open('a.txt')
  30. f.__next__()
  31.  
  32. 生成器并行运算

生成器并行运算

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3. name='lhf'
  4. passwd=''
  5.  
  6. def auth(auth_type):
  7. def inner_auth(func):
  8. def _wrapper(*args,**kwargs):
  9. username=input('username: ')
  10. password=input('passwd: ')
  11. if auth_type == 'local':
  12. if username == name and password ==passwd:
  13. print('user login successfull')
  14. res=func(*args,**kwargs)
  15.  
  16. else:
  17. exit('log err')
  18. elif auth_type == 'ldap':
  19. print('搞毛线ldap,谁特么会')
  20.  
  21. return _wrapper
  22. return inner_auth
  23.  
  24. def index():
  25. print('welcome to index page')
  26.  
  27. @auth(auth_type='local')
  28. def home():
  29. print("welcome to home page")
  30.  
  31. @auth(auth_type='ldap')
  32. def bbs():
  33. print('welcome to bbs page')
  34.  
  35. index()
  36. home()
  37. bbs()
  38.  
  39. 带参数装饰器

带参数装饰器

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. prices={
  4. 'ACME':45.23,
  5. 'AAPL':612.78,
  6. 'IBM':205.55,
  7. 'HPQ':37.20,
  8. 'FB':10.75
  9. }
  10. prices_new={key:val for key,val in prices.items() if val > 200}
  11. print(prices_new)
  12.  
  13. 从字典中提取子集

从字典中提取子集

  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3. from collections import namedtuple
  4. #商品,购买个数,单价
  5. records=[
  6. ('mac',2,20000),
  7. ('lenovo',1,3000),
  8. ('apple',0,10),
  9. ('tesla',10,1000000)
  10. ]
  11. '''
  12. 命名元组的一个主要用途是将你的代码从下标操作中解脱出来。
  13. 因此,如果你从数 据库调用中返回了一个很大的元组列表,通
  14. 过下标去操作其中的元素,当你在表中添 加了新的列的时候你
  15. 的代码可能就会出错了。但是如果你使用了命名元组,那么就不
  16. 会有这样的顾虑。
  17. 为了说明清楚,下面是使用普通元组的代码:
  18. '''
  19. cost=0.0
  20. for rec in records:
  21. cost+=rec[1]*rec[2]
  22. print('商品:%s 购买个数:%s,总价格为:%s' %(rec[0],rec[1],cost))
  23.  
  24. #使用命名元祖后
  25. sk=namedtuple('Stock',['name','count','price'])
  26. for rec in records:
  27. s=sk(*rec)
  28. print(s.count*s.price)
  29.  
  30. p=namedtuple('People',['name','gender','age'])
  31. l=['alex','femal',18]
  32. p1=p(*l)
  33. print(p1)
  34. print(p1.name)
  35. print(p1.age)
  36. print(p1.gender)
  37.  
  38. '''
  39. 命名元组另一个用途就是作为字典的替代,
  40. 因为字典存储需要更多的内存空间。如果
  41. 你需要构建一个非常大的包含字典的数据结构,
  42. 那么使用命名元组会更加高效。但 是需要注意的是,
  43. 不像字典那样,一个命名元组是不可更改的。比如:
  44. '''
  45. p=namedtuple('People',['name','gender','age'])
  46. l=['alex','femal',18]
  47. p1=p(*l)
  48. print(p1.name)
  49. # p1.name='sb'#报错,不可修改
  50. p1=p1._replace(name='sb')#需要重新赋值给p1
  51. print(p1.name)
  52.  
  53. #可以新建一个函数,弥补必须使用_replace才能修改元素的缺点
  54. p=namedtuple('People',['name','gender','age'])
  55. p1=p('','',None)
  56. def dict_to_stock(s):
  57. return p1._replace(**s)
  58.  
  59. print(dict_to_stock({'name':'alex','gender':'f','age':18}))
  60. print(dict_to_stock({'name':'sb','gender':'f','age':18}))
  61.  
  62. nametuple命名元组

nametuple命名元组

python基础知识7---补充的更多相关文章

  1. python基础知识(二)

    以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

  2. python基础知识小结-运维笔记

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...

  3. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  4. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

  5. python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  6. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  7. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  8. Python基础知识(五)

    # -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...

  9. Python基础知识(Basic knowledge)

    Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...

  10. Python 基础知识(一)

    1.Python简介 1.1.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...

随机推荐

  1. .net 服务因为GC时遇到的问题和解决办法

    1.问题: .net单一服务中,大量的请求访问后台服务,多线程处理请求,但每个线程都可能出现超时的现象.记录超时日志显示,超时可能在序列化时,Socket异步发送AsyncSend数据时,普通业务处理 ...

  2. [Leetcode]27. 移除元素

    题目描述: ++难度:简单++ 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 ...

  3. Tensorflow系列——Saver的用法

    摘抄自:https://blog.csdn.net/u011500062/article/details/51728830/ 1.实例 import tensorflow as tf import n ...

  4. silverlight中 设置 头像(添加图片)

    参考文章: http://www.cnblogs.com/wsdj-ITtech/archive/2009/08/26/1554056.html 1. ChainManager.xaml 前台 < ...

  5. cmd中运行maven -v提示JAVA_HOME的配置问题解决办法

    问题描述: 在安装maven之后,输入:mvn --version进行查询,结果是: The JAVA_HOME environment variable is not defined correct ...

  6. linux btrfs文件系统管理与应用

    btrfs文件系统管理与应用 1.btrfs文件系统 基本介绍 btrfs文件系统在CentOS7.x上属于技术预览版 btrfs文件系统英文名:B-tree  FileSystem或者Butter ...

  7. PXE高效能批量网络装机

    PXE简绍 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器 ...

  8. 个性化自己的DOS窗口

    就是为了好看吧,感觉没啥大用 ============= 首先创建一个文本,写下如下命令 @echo off color D echo ======================== echo == ...

  9. sdk(输入驱动物体 驱动属性 被驱动物体 被驱动属性 驱动数值 一键搞定驱动),当你的目标体很多展开会卡的时候使用这个

    import  maya.cmds  as  mc def   sdksomething( sdk_obj="",                    sdkAttr=" ...

  10. 初学高级程序设计 shell编程

    初学shell编程,遇到的一些问题和总结: 一.#!/bin/sh 为什么要在shell程序里要加这一行? 首先在shell编程里面,"#"符号确实是一个注释符号,但是在这里绝对不 ...