python 学习笔记(6)闭合与生成器

来源:互联网 发布:如何看待网络水军 编辑:程序博客网 时间:2024/06/06 03:05

 

声明:本文系本人学习python3总结,如有侵权等,请及时告知;

                       欢迎转载:请保留http://blog.csdn.net/kevinx_xu/article/details/8901720

         yield 命令

         主要重点注意yield的工工作过程。

         第一次next()构建生成器

                  对同一生成器对象反复调用 next() 将确切地从上次调用的位置开始继续,直到下一条 yield 语句。所有的变量、局部数据等内容在 yield 时被保存,在 next() 时被恢复。

一、正则表达式深层次应用

         1、补充

         []中括号表示“匹配中括号中这些字符的其中之一”

         [^]  ^ 有特别的含义:非。[^abc] 的意思是:“ 除了 a b  c 之外的任何字符”。

         \1,它表示“嘿,记住的第一个分组呢?把它放到这里。(即是匹配到的第一个匹配项)

                   类似linux shell中的$1 $2

二、匹配模式列表

         eg

         #!/usr/bin/envpython

         importre

         importos

         importsys

 

         defmatch_test(pattern, search, replace):

                def match_rule(word='bass'):                                                               

         print word

         return re.search(pattern, word)

   def apply_rule(word='bass'):

       return re.sub(search, replace, word)

   return (match_rule(), apply_rule())

 

         if__name__ == '__main__':

             print "This is a test program forpython"

                os.system('date')

               patterns = (('[sxz]$' , '$', 'es'),

           ('[^aeioudgkprt]h$', '$', 'es'),

           ('(qu|[^aeiou])y$', 'Y$', 'ies'),

           ('$', '$','s'))

 

   for(pattern, search, replace) in patterns:

       print pattern

       print search 

       print replace   

   

   rules = [match_test(pattern, search, replace) for (pattern, search,replace) in patterns]   

         以上示例为函数嵌套以及列表的解析确切的可以称之为元组的解析实现的正则表达式测试;

 

三,匹配文件

         1with 语句

         创建了叫做 context【上下文】的东西:当 with 块结束时,Python 将自动关闭文件,即便是在 with 块中引发了例外也会这样。

eg

             with open('./patterns.txt','r')aspattern_fd:

       for line in pattern_fd:

           (pattern, search, replace) = line.split(',')

           print pattern

           print search 

           print replace   

           print match_test(pattern, search, replace)     

对文件解析,和对列表,元组等解析是一样的,具体使用,具体考虑用那种方法实现。

四、生成器

         yield 命令的意思是这不是一个普通的函数。它是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 x 值的 生成器Generator 

第一次通过next()调用生成器,仅仅是完成了创建,并没有开始执行代码;

第二次调用next()  对同一生成器对象反复调用 next() 将确切地从上次调用的位置开始继续,直到下一条 yield 语句。所有的变量、局部数据等内容在 yield 时被保存,在 next() 时被恢复。

 

         1、斐波那奇生成器

         yield 暂停一个函数。“next() 从其暂停处恢复其运行。  

         def fib(max): 

                     a, b = 0, 1         

                     while a < max: 

                              yield a        

                               a, b = b, a + b