zoukankan      html  css  js  c++  java
  • Python学习笔记5-闭合与生成器

    >>> import re
    >>> re.search('[abc]','mark')
    <_sre.SRE_Match object; span=(1, 2), match='a'>
    
    >>> re.sub('[abc]','o','Mark')
    'Mork'
    >>> re.sub('[abc]','o', 'carp')
    'oorp'
    
    import re
    
    def plural(noun):
    	if re.search('[sxz]$',noun):
    		return re.sub('$','es',noun)
    	elif re.search('[^aeioudgkprt]h$',noun): 
    		return re.sub('$','es',noun)
    	elif re.search('[^aeiou]y$',noun):
    		return re.sub('y$','ies',noun)
    	else:
    		return noun+'s' 

    注:

    [abc] --匹配a,b,c中的任何一个字符

    [^abc] -- 匹配除了a,b,c的任何字符

    >>> import re
    >>> re.search('[^aeiou]y$','vancancy')
    <_sre.SRE_Match object; span=(6, 8), match='cy'>
    
    >>> re.sub('y$','ies','vacancy')
    'vacancies'
    >>> re.sub('([^aeiou])y$',r'1ies','vacancy')
    'vacancies'
    

     注:

    1-- 表示将第一个匹配到的分组放入该位置。 如果有超过一个分组,则可用2, 3等等。

    函数列表:

    a. 在动态函数中使用外部参数值的技术称为闭合。

    import re
    
    def build_match_and_apply_functions(pattern,search,replace):
    	def matches_rule(word):
    		return re.search(pattern,word)
    
    	def apply_rule(word):
    		return re.sub(search,replace,word)
    
    	return (matches_rule,apply_rule)
    

    b.

    >>> patterns = (
    	('[sxz]$','$', 'es'),
    	('[aeioudgkprt]h$', '$', 'es'),
    	('(qu|[^aeiou])y$', 'y$','ies'),
    	('$', '$', 's')
    	)
    
    >>> rules = [build_match_and_apply_functions(pattern, search, replace) for (pattern, search, replace) in patterns]
    
    >>> rules
    [(<function build_match_and_apply_functions.<locals>.matches_rule at 0x10384d510>, <function build_match_and_apply_functions.<locals>.apply_rule at 0x10384d598>), (<function build_match_and_apply_functions.<locals>.matches_rule at 0x10384d620>, <function build_match_and_apply_functions.<locals>.apply_rule at 0x10384d6a8>), (<function build_match_and_apply_functions.<locals>.matches_rule at 0x10384d730>, <function build_match_and_apply_functions.<locals>.apply_rule at 0x10384d7b8>), (<function build_match_and_apply_functions.<locals>.matches_rule at 0x10384d840>, <function build_match_and_apply_functions.<locals>.apply_rule at 0x10384d8c8>)]
    >>> 
    

    c.匹配模式文件

    import re
    
    def build_match_and_apply_functions(pattern, search,replace):
    	def matches_rule(word):
    		return re.search(pattern,word)
    
    	def apply_rule(word):
    		return re.sub(search,replace,word)
    
    	return (matches_rule,apply_rule)
    
    rules = []
    with open('plural4-rules.txt', encoding = 'utf-8') as pattern_file:
    	for line in pattern_file:
    		pattern,search,replace = line.split(None,3)
    
    rules.append(build_match_and_apply_functions(pattern,search,replace))
    

     1) open():打开文件并返回一个文件对象。

     2) 'with':创建了一个context:当with语句结束时,python自动关闭文件,即便是打开是发生意外。

     3)split(None,3): None表示对任何空白字符(空格,制表等)进行分隔。3表示针对空白分隔三次,丢弃该行剩下的部分。

    生成器:

    >>> def make_counter(x):
    	print('entering make_counter')
    	while True:
    		yield x
    		print('incrementing x')
    		x=x+1
    
    		
    >>> counter = make_counter(2)
    >>> counter
    <generator object make_counter at 0x1038643f0>
    >>> next(counter)
    entering make_counter
    2
    >>> next(counter)
    incrementing x
    3
    >>> next(counter)
    incrementing x
    4
    >>> next(counter)
    incrementing x
    5
    
    def fib(max):
    	a,b = 0, 1
    
    	while a < max :
    		yield a
    		a, b = b, a+b
    
    
    >>> for n in fib(100):
    	print(n,end=' ')
    
    0 1 1 2 3 5 8 13 21 34 55 89 
    >>> list(fib(200))
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
    

    1)将一个生成器传递给list()函数,它将遍历整个生成器并返回所有生成的数值。

  • 相关阅读:
    December 23rd 2016 Week 52nd Friday
    December 22nd 2016 Week 52nd Thursday
    December 21st 2016 Week 52nd Wednesday
    December 20th 2016 Week 52nd Tuesday
    December 19th 2016 Week 52nd Sunday
    December 18th 2016 Week 52nd Sunday
    uva294(唯一分解定理)
    uva11624Fire!(bfs)
    fzu2150Fire Game(双起点bfs)
    poj3276Face The Right Way
  • 原文地址:https://www.cnblogs.com/summerlong/p/4482302.html
Copyright © 2011-2022 走看看