• 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()函数,它将遍历整个生成器并返回所有生成的数值。

  • 相关阅读:
    权当这是开始吧
    rabbitmq实现一台服务器同时给指定部分的consumer发送消息(tp框架)(第六篇)
    部分替换mysql表中某列的字段
    rabbitmq实现一台服务器同时给指定部分的consumer发送消息(tp框架)(第五篇)
    rabbitmq实现一台服务器同时给所有的consumer发送消息(tp框架)(第四篇)
    rabbit服务器挂掉以后,保证队列消息还存在(tp框架)(第三篇)
    HDU 1114 Piggy-Bank (poj1384)
    01背包
    等价表达式(noip2005)
    机器翻译(noip2010)
  • 原文地址:https://www.cnblogs.com/summerlong/p/4482302.html
Copyright © 2020-2023  润新知