正则表达式
1. 择一匹配:管道符号(|),表示“从多个模式中选择其一”。例:at|home à at、home
2. 点号匹配除了换行符以外的任何字符
3. 边界匹配:\b匹配一个单词的边界;\B匹配在一个单词中间,即不是单词边界。
4. 字符集:匹配方括号中包含的任何字符。只适用于单字符的情况。例:[ab] à a、b
5. 星号(*)匹配其左边出现零次或多次
加号(+)匹配一次或多次出现
问号(?)匹配零次或一次出现
6. 字符集特殊字符:\d表示匹配任何十进制数字
\w表示全部字母的字符集
\s表示空格字符
注:特殊字符的大写表示不匹配,例:\D表示任何非十进制数字
7. 圆括号指定分组和匹配子组,例:(\w+)-(\d+)
8. 匹配对象:group()和groups().
9. group():要么返回整个匹配对象,要么根据要求返回特定子组;groups()仅返回一个包含唯一或全部子组的元组。
10.match()和search()区别:match()从字符串的起始部分开始匹配;search()不但会搜索起始部分,而且严格地对字符串从左到右搜索。
11.findall()查询字符串中某个正则表达式模式全部的非重复出现情况,返回的是一个列表。
12.finditer()是与findall()类似但更节省内存的实体。区别:返回的是一个迭代器。
13.搜索与替换:sub()和subn()
都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换。区别:subn()还返回一个表示替换的总数。
函数
1. *args 会把多传入的参数变成一个元组形式
2. **kwargs 会把多传入的参数变成一个dict形式
3. 参数:
普通参数:严格按照顺序,将实参传给形参
默认参数:必须放置在参数列表的最后
指定参数:将参数赋值给指定的形参
动态参数:* 默认传入的参数,全部放置在元组中
** 默认传入的参数,全部放置在字典中
万能参数: *args, ** kwargs
4. Python中,函数的参数传递,是引用,不是复制。
5. 变量:
全局变量,所有作用域都可读。
对全局变量进行重新赋值,需要global,如:global name
特殊,对列表、字典,可修改,但不可重新赋值。
全局变量统一大写。
6. 三元运算(三目运算) 对 if else的简写
例:name = ‘alex’ if 1==1 else ‘SB’
7. 闭包:
闭包是一个函数,并且这个函数具有以下特点:
- 定义在另外一个函数里面(嵌套函数)
- 引用其所在函数环境的自由变量
例:关于一个抛物线的函数
#!/usr/bin/env python
# coding:utf-8
def parabola(a, b, c):
def para(x):
return a*x**2 + b*x + c
return para
p = parabola(2, 3, 4)
print(p(5))
内置函数
1. abs(): 绝对值
2. all(): 所有为真,才为真
3. any(): 又要有真就为真
4. ascii(): 自动执行对象的__repr__方法
5. bytes(): 字符串转换成字节类型
补充:字符编码
对utf-8,一个汉字占三个字节
对gbk,一个汉字占两个字节
n = bytes('李杰',encoding='utf-8/gbk')
bytes(要转换的字符串,编码类型)
6. str(): 字节转换成字符串
str(bytes('李杰',encoding='utf-8'),encoding='utf-8')
7. map(): map(func,seq) 例:map(lambda x: x+3,[1,2,3,4]) à [4,5,6,7]
8. reduce(): 横着逐个元素进行运算。
python3中,from functools import reduce 导入
例:计算1*2*3*4*5*6*7
>> reduce(lambda x,y:x*y , [1,2,3,4,5,6,7])
>> 5040
9. zip(): zip()的参数是可迭代对象。
例1:
>>> colors = ["red", "green", "blue"]
>>> values = [234, 12, 89, 65]
>>> for col, val in zip(colors, values):
... print ((col, val))
...
('red', 234)
('green', 12)
('blue', 89)
例2:
>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 2, 9, 0, 9]
>>>list(map(lambda pair: max(pair), zip(a, b)))
[2, 2, 9, 4, 9]
说明:zip()可以同时迭代多个序列,其创建出的结果是一个迭代器。通常用在需要将不同的数据配对在一起时。
10. iter(): 可以选择性接受一个无参的可调用对象以及一个哨兵(结束)值作为输入。
import sys
f = open(‘/etc/passwd’)
for chunk in iter(lambda: f.read(10), ‘’):
n = sys.stdout,write(chunk)
文件操作
1. x: 表示文件存在,报错,文件不存在,创建并写内容(python3,x中新增)
2. a: 表追加
3. 自动关闭文件
with open(‘db.txt’,’r’) as f: pass
4. 如果打开文件模式,无b,则 read按照字符
5. read(): 无参数,读全部,有参数[有b,按字节;无b,按字符]
6. tell(): 当前指针所在的位置,永远是字节单位
7. seek(): 调整当前指针的位置,以字节为单位
8. write(): 从当前指针位置向后覆盖
9. fileno(): 文件描述符
10.flush(): 将缓冲区文件强制写入硬盘
11. truncate(): 根据指针位置进行截断,且指针后的内容清空
12. 将多个映射合并为单个映射:collections模块中的ChainMap类。ChainMap只是简单地维护一个记录底层映射关系的列表。
from collections import ChainMap a = {'x': 1 , 'z' : 3} b = {'y': 2 , 'z' : 4} c = ChainMap(a,b) print(c['x']) #output 1 (from a) print(c['y']) #output 2 (from b) print(c['z']) #output 3 (from a) >> del c['y'] ... KeyError: "Key not found in the first mapping: 'y'"
说明:修改映射的操作总是会作用在列出的第一个映射结构上。
ChainMap与update()区别:
>>> a = {'x': 1 , 'z' : 3}
>>> b = {'y': 2 , 'z' : 4}
>>> merged = dict(b)
>>> merged.update(a)
>>> merged
{'x': 1, 'y': 2, 'z': 3}
#修改属性值后,不变
>>> a['x'] = 32
>>> merged
{'x': 1, 'y': 2, 'z': 3}