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

时间: 2024-10-16 04:02:59

Python学习笔记5-闭合与生成器的相关文章

Python学习笔记__3.4章 生成器

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 列表元素按照某种算法推算出来,在循环的过程中不断推算出后续的元素.这种一边循环一边计算的机制,称为生成器:generator 1.1.创建 generator 1)方法一 只要把一个列表生成式的[]改成(),就创建了一个generator L = [x * x for x in range(10)]  #  这是列表生成式 g = (x * x for x in range(10)) #  这是generator >>> g &

python学习笔记——列表生成式与生成器

1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行: 1 L = [] 2 for i in range(1,11): 3 L.append(i*i) 列表生成式只用一行,前面是生成规则,后面是初始元素,最后还可以加上判断条件: 1 [i*i for i in range(1, 11)] 列表生成式还可以实现多层循环,以及判断,刚刚的栗子再写复杂一

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

【Python学习笔记之二】浅谈Python的yield用法

在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前

python &nbsp; 学习笔记 (核心)

python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[0],x[-1]指最后一个字符,x[2:4]取子串, '''hello''' #hello三引号会保留文本输入时的换行符制表符等不需要转义,用于多行原样输入保存 'hello'+'world' #字符串拼接,'hello'*2 #字符串重复 help(fun) #帮助,help(module.met

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件