1. 类
类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。
定义类时,如有父类,则写在类名后面的括号里。如果没有继承任何其他父类,默认父类为object。靠继承进行子类化是创建和定制新类类型的一种方式,子类继承基类的属性,如果子类重写基类构造器,基类构造器就不会被调用(否则被调用),基类构造器必须显式写出才会被执行。
类里定义函数,第一个参数必须是self
,代表实例对象本身;__init__
函数,在新对象实例化时会自动运行,用于给新对象赋初值,不应当返回任何对象;类内定义函数时,如调用自身或父类的函数与变量,应使用self.函数名
或self.变量名
。
混合记法(mixedCase) 或 骆驼记法(camelCase) :
- 类名通常由大写字母打头(如"AddrBookEntry",“RepairShop”)
- 数据属性使用名词作为名字(如"name", “phone”,“email”)
- 方法使用谓词(动词加对象, 如"updateEmail"),Python规范推荐使用骆驼记法的下划线方式,如"update_email" 。
Python使用以下编码方式进行访问控制:
- 单下划线(
_foo
):表示protected变量,只允许其本身与子类访问,不能用于from module import * - 双下划线(
__foo
):表示private变量,只允许这个类本身访问。 - 头尾双下划线(
__foo__
):定义的是特列方法,类似__init__()
。
issubclass()
判断一个类是否另一个类的子类或子孙类
isinstance()
判断一个对象否另一个给定类的实例
特殊类属性:
name 类的名字(字符串)
doc 类的文档字符串
bases 类的所有父类构成的元组
dict 类的属性(返回一个字典,keys是属性名,values是相应属性对象的数据值)
module 类定义所在的模块
class 实例对于的类
e.g.
定义类AddrBookEntry
class AddrBookEntry(object): def __init__(self,id,nm,ph): self.empid = id self.name = nm self.phone = ph print('Create instance for:', self.name) def updatePhone(self,newph): self.phone = newph print('Update phone for:',self.name)
john = AddrBookEntry(1,'John Doe','408-555-1212') print(john.name) print(john.phone)
输出
Create instance for: John Doe
John Doe
408-555-1212
john.updatePhone('415-555-1212') print(john.phone)
输出
Update phone for: John Doe
415-555-1212
定义类EmplAddrBookEntry
class EmplAddrBookEntry(AddrBookEntry): def __init__(self,id,nm,ph,em): AddrBookEntry.__init__(self,id,nm,ph) self.email = em def updateEmail(self,newem): self.email = newem print('Update email address for:', self.name)
john = EmplAddrBookEntry(1,'John Doe','408-555-1212','john@python.org') print(john.email)
输出
Create instance for: John Doe
john@python.org
john.updateEmail('john@java.org') print(john.email)
输出
Update email address for: John Doe
john@java.org
2. 文件操作
使用BIF opne()
/file()
,打开文件(默认以读方式,若文件含有汉字可使用encoding=‘utf-8’),返回一个文件对象。文件对象访问模式,默认值为’r’
(1)文件对象的访问模式
文件模式 | 操作 |
r | 只读模式 |
w | 只写模式,创建新文件 |
a | 追加模式(若文件不存在,则创建一个) |
r+ | 读写模式 |
w+ | 读写模式 |
a+ | 读写模式 |
rb | 二进制读模式 |
wb | 二进制写模式 |
ab | 二进制追加模式 |
rb+ | 二进制读写模式 |
wb+ | 二进制读写模式 |
ab+ | 二进制读写模式 |
(2) 文件对象的方法
read()
读取文件到字符串,如果未给定size参数(默认-1)或size值为负数,将读取整个文件。
readlines()
读取文件的所有(剩余)行,返回一个字符串列表(行列表)。
readline()
从一个打开的文件每次读取一行数据,将整行(含行结束符)作为字符串返回。如果未给定size参数(默认-1)或size值为负数,读取至行结束符。当没有足够内存可以一次读取整个文件时,使用readline()。
write()
将字符串写入文件
seek()
方法可以将文件"退回"到起始位置
flush()
清除内部I/O缓存,并将数据强行写会磁盘
close()
方法关闭一个之前打开的文件
3. 正则表达式
(1) 常用特殊符号
.
任意单个字符
^
匹配字符串开头
$
匹配字符串结尾
*
前一个字符0次或无限次扩展 abc*
可以是ab/abc/abcc/abccc
+
前一个字符1次或无限次扩展 abc+
可以是abc/abcc/abccc
?
前一个字符0次或1次扩展 abc?
可以是ab/abc
|
左右表达式任意一个 abc|def
表示abc或def
{m}
扩展前一个字符m次 ab{2}c
表示 abbc
{m,n}
扩展前一个字符m至n次(含n)ab{1,2}c
表示 abc/abbc
[ ]
对单个字符给出取值范围
[abc]
表示a,b,c中的一个 [a-z]
表示a到z单个字符
[^]
对单个字符给出排除范围 [^abc ]
非a或b或c的单个字符
()
分组标记,内部只能用|
\d
数字,等价于[0-9]
\w
单词字符,等价于[A-Za-z0-9_]
e.g.
^[A-Za-z]+$
26个字母组成的字符串
[A-Za-z0-9]+$
26个字母和数字组成的字符串
[\u4e00-\u9fa5]
中文字符
^[\u4E00-\u9FA5]{2,4}
2-4个汉字
(2) re模块
match()
:从字符串开始位置对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
search()
:从字符串任意位置的地方,对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
findall()
:返回全部匹配对象的列表
split()
:根据正则表达式的分隔符吧字符串分割为一个列表,并返回
匹配对象主要有以下两个方法:
group()
:返回全部匹配对象,或特定subgroup,如group(0)
groups()
:返回一个包含全部匹配的subgroup的元组(如果没有成功匹配,返回一个空元组)
函数式用法:一次性操作
import re rst = re.search(r'[1-9]\d{5}','TEST 1000191')
面向对象用法:编译多次操作
pat = re.compile(r'[1-9]\d{5}') rst = pat.search('TEST 1000191')