您的位置:首页 > 编程语言 > Python开发

Python学习(三):迭代器、生成器、装饰器、递归、算法、正则

2017-02-13 11:24 856 查看
1、迭代器  

  迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。
  特点:
    访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
    不能随机访问集合中的某个值,只能从头到尾依次访问
    访问到一半时不能往回退
    便于循环比较大的数据集合,节省内存

  使用:

    #生成迭代器:
    name = iter(['d','c','b','a',])
    print(name.__next__())
    print(name.__next__())
    print(name.__next__())
    print(name.__next__())

    f = open("test.text","r")
    for line in f: #已迭代的方式读取文件,节省内存
      print(line)

2、生成器

  一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

  作用:
    yield可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。
    相当于生成器函数生成值后自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效。

1 #!/usr/bin/env python
2 #coding=utf-8
3 DataList = [1,2,2,65,3,55,3,5,54,3,54,3,4,534,5435,234]
4 #DataList一共有N个数据,那么就要经过N-1次排序才能完成从小到大排序
5 for j in range(1,len(DataList)):
6     #从第一个数据开始,依次和下一个数据进行比较
7     for i in range(len(DataList)-j):
8         #如果本次数据大于下一个数据,将本次数据与下次数据调换位置
9         if DataList[i] > DataList[i+1]:
10             SmallTmp = DataList[i+1]
11             DataList[i+1] = DataList[i]
12             DataList[i] = SmallTmp
13 print(DataList)


冒泡排序

6、正则入门

  三十分钟正则表达式>>点我

1 #!/usr/bin/env python
2 #coding=utf-8
3
4 import re
5 #match:从开头找,如果开头不匹配则返回None
6 result1 = re.match('\d+','11112421adsafefrqweadfadfsafdqdf')
7 #search:是遍历,直到找到为止,找到即终止
8 result2 = re.search('\d+','ds2ad213131safe22frqweadfadfsafdqdf')
9 #findall:查找所有的匹配值,返回的是一个列表
10 result3 = re.findall('\d+','11112421adsafefrqw3ea432dfadfsafdqdf')
11 #匹配1到3,出现1到5次,*零到多个  ?零或者一  +大于等于1
12 result4 = re.findall('[1-3]{1,5}','11112421adsafefrqw3ea432dfadfsafdqdf')
13 Before = "11112421adsafefrqw3ea432dfadfsafdqdf"
14 #sun:替换,将a替换成T,替换6个
15 After = re.sub("a","T",Before,count=6)
16 if result1:
17     print(result1.group())
18 if result2:
19     print(result2.group())
20 if result3:
21     print(result3)
22 if result4:
23     print(result4)
24 print(Before,After)
  #*零到多个  ?零或者一  +大于等于1 ^匹配开头 $匹配结尾 .匹配任意字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: