重庆中环建设有限公司网站,wordpress安装证书,合肥论坛,wordpress页面关联目录Python提供了 with 语句的写法#xff0c;既简单又安全。
文件操作的时候使用with语句可以自动调用关闭文件操作#xff0c;即使出现异常也会自动关闭文件操作。
# 1、以写的方式打开文件
with open(1.txt, w) as f:# 2、读取文件内容f.write(hello world)
生成器的创建方…Python提供了 with 语句的写法既简单又安全。
文件操作的时候使用with语句可以自动调用关闭文件操作即使出现异常也会自动关闭文件操作。
# 1、以写的方式打开文件
with open(1.txt, w) as f:# 2、读取文件内容f.write(hello world)
生成器的创建方式
生成器推导式
与列表推导式类似只不过生成器推导式使用小括号 。
# 创建生成器
my_generator (i * 2 for i in range(5))
print(my_generator)# next获取生成器下一个值
# value next(my_generator)
# print(value)# 遍历生成器
for value in my_generator:print(value) next 函数获取生成器中的下一个值 for 循环遍历生成器中的每一个值 yield生成器
yield 关键字生成器的特征在def函数中具有yield关键字
def generator(n):for i in range(n):print(开始生成...)yield iprint(完成一次...)g generator(5)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g)) ----- 正常
print(next(g)) ----- 报错
Traceback (most recent call last):File /Users/cndws/PycharmProjects/pythonProject/demo.py, line 14, in moduleprint(next(g))
StopIteration
def generator(n):for i in range(n):print(开始生成...)yield iprint(完成一次...)g generator(5)
for i in g:print(i) 开始生成... 0 完成一次... 开始生成... 1 完成一次... 开始生成... 2 完成一次... 开始生成... 3 完成一次... 开始生成... 4 完成一次... 注意点
① 代码执行到 yield 会暂停然后把结果返回出去下次启动生成器会在暂停的位置继续往下执行
② 生成器如果把数据生成完成再次获取生成器中的下一个数据会抛出一个StopIteration 异常表示停止迭代异常
③ while 循环内部没有处理异常操作需要手动添加处理异常操作
④ for 循环内部自动处理了停止迭代异常
yield关键字和return关键字
如果不太好理解yield可以先把yield当作return他们都在函数中使用并履行着返回某种结果的职责。
这两者的区别是
有return的函数直接返回所有结果程序终止不再运行并销毁局部变量
而有yield的函数则返回一个可迭代的 generator生成器对象可以使用for循环或者调用next()方法遍历生成器对象来提取结果。
def example():x 1y 10while x y:yield xx 1example example()
print(example)
yield与斐波那契数列
数学中有个著名的斐波拉契数列
要求数列中第一个数为0第二个数为1其后的每一个数都可由前两个数相加得到
例子1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们使用生成器来实现这个斐波那契数列每次取值都通过算法来生成下一个数据,生成器每次调用只生成一个数据可以节省大量的内存。
def fib(max): n, a, b 0, 0, 1 while n max: yield b # 使用 yield# print b a, b b, a b n n 1for n in fib(5): print n
什么是正则表达式
正则表达式描述了一种字符串匹配的模式可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
模式一种特定的字符串模式这个模式是通过一些特殊的符号组成的。 某种也可以理解为是一种模糊匹配。
精准匹配select * from blog where titlepython;
模糊匹配select * from blog where title like ‘%python%’;
正则表达式并不是Python所特有的在Java、PHP、Go以及JavaScript等语言中都是支持正则表达式的。
正则表达式的功能 ① 数据验证表单验证、如手机、邮箱、IP地址
② 数据检索数据检索、数据抓取
③ 数据隐藏1356235 王先生
④ 数据过滤论坛敏感关键词过滤
什么是re模块
在Python中需要通过正则表达式对字符串进行匹配的时候可以使用一个re模块
# 第一步导入re模块
import re
# 第二步使用match方法进行匹配操作
result re.match(pattern正则表达式, string要匹配的字符串, flags0)
# 第三步如果数据匹配成功使用group方法来提取数据
result.group()
match函数参数说明
参数描述pattern匹配的正则表达式string要匹配的字符串。flags标志位用于控制正则表达式的匹配方式如是否区分大小写多行匹配等等。参见正则表达式修饰符 - 可选标志
匹配成功re.match方法返回一个匹配的对象否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配数据。
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志
修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别locale-aware匹配这个功能是为了支持多语言版本的字符集使用环境的比如在转义符\w在英文环境下它代表[a-zA-Z0-9_]即所以英文字符和数字。如果在一个法语环境下使用缺省设置下不能匹配é 或 ç。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用它仍然不能匹配中文字符。re.M多行匹配影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.re.XVERBOSE冗余模式 此模式忽略正则表达式中的空白和#号的注释例如写一个匹配邮箱的正则表达式。该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
re模块的相关方法
re.match(pattern, string, flags0) 从字符串的起始位置匹配如果匹配成功则返回匹配内容 否则返回None
☆ re.findall(pattern, string, flags0) 扫描整个串返回所有与pattern匹配的列表 注意: 如果pattern中有分组则返回与分组匹配的列表 举例 re.findall(\d,chuan1zhi2) [1,2]
☆ re.finditer(pattern, string, flags) 功能与上面findall一样不过返回的时迭代器 参数说明 pattern : 模式字符串。 repl : 替换的字符串也可为一个函数。 string : 要被查找替换的原始字符串。 count : 模式匹配后替换的最大次数默认 0 表示替换所有的匹配。 flags: 匹配方式: re.I 使匹配对大小写不敏感I代表Ignore忽略大小写 re.S 使 . 匹配包括换行在内的所有字符 re.M 多行模式,会影响^,$
案例1查找一个字符串中是否具有数字“8”
import reresult re.findall(8, 13566128753)
# print(result)
if result:print(result)
else:print(未匹配到任何数据) 案例2查找一个字符串中是否具有数字
import reresult re.findall(\d, a1b2c3d4f5)
# print(result)
if result:print(result)
else:print(未匹配到任何数据)
案例3查找一个字符串中是否具有非数字
import reresult re.findall(\D, a1b2c3d4f5)
# print(result)
if result:print(result)
else:print(未匹配到任何数据)
正则表达式编写查什么、查多少、从哪查
1、查什么
代码功能.英文点号匹配任意1个字符除了\n[ ]匹配[ ]中列举的某个字符专业名词 字符簇[^指定字符]匹配除了指定字符以外的其他某个字符^专业名词 托字节\d匹配数字即0-9\D匹配非数字即不是数字\s匹配空白即 空格tab键\S匹配非空白\w匹配非特殊字符即a-z、A-Z、0-9、_\W匹配特殊字符即非字母、非数字、非下划线
字符簇常见写法
① [abcdefg] 代表匹配abcdefg字符中的任意某个字符1个
② [aeiou] 代表匹配a、e、i、o、u五个字符中的任意某个字符
③ [a-z] 代表匹配a-z之间26个字符中的任意某个
④ [A-Z] 代表匹配A-Z之间26个字符中的任意某个
⑤ [0-9] 代表匹配0-9之间10个字符中的任意某个
⑥ [0-9a-zA-Z] 代表匹配0-9之间、a-z之间、A-Z之间的任意某个字符 字符簇 托字节结合代表取反的含义
① [^aeiou] 代表匹配除了a、e、i、o、u以外的任意某个字符
② [^a-z] 代表匹配除了a-z以外的任意某个字符 \d 等价于 [0-9] 代表匹配0-9之间的任意数字
\D 等价于 [^0-9]代表匹配非数字字符只能匹配1个
2、查多少
代码功能*匹配前一个字符出现0次或者无限次即可有可无0到多匹配前一个字符出现1次或者无限次即至少有1次1到多?匹配前一个字符出现1次或者0次即要么有1次要么没有0或1{m}匹配前一个字符出现m次匹配手机号码\d{11}{m,}匹配前一个字符至少出现m次\w{3,}代表前面这个字符最少要出现3次最多可以是无限次{m,n}匹配前一个字符出现从m到n次\w{6,10}代表前面这个字符出现6到10次
基本语法
正则匹配字符.或\w或\S 跟查多少
如\w{6, 10}
如.*匹配前面的字符出现0次或多次
3、从哪查
代码功能^匹配以某个字符串开头$匹配以某个字符串结尾
正则工具箱 :
正则表达式代码生成工具 等