1. 类和对象
在python中,所有数据类型都可以视为对象。在面向对象的编程中,最重要的概念就是类(Class)和实例(Instance)。类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
以Student类为例,在python中,定义类是通过class关键字,class后面紧接着是类名,即Student,类名通常是以大写字母开头,紧接着是(object),表示改类是从哪个类继承下来的,通常,如果没有合适的继承类,就用object类,这是所有类最终都会继承的类。
定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的。
可以看出,变量tom指向的就是一个Student的object,后面的0x0000019DC9A32E80是内存地址,每个object的地址都不一样。
可以自由地给一个实例变量绑定属性,比如,给tom变量绑定一个name属性:
类可以起到模板的作用,在创建实例的时候,我们可以把一些必须绑定的属性强制填进去。比如Student类,在创建实例的时候就通过 __init__ 方法,把name,score等属性绑上去:
注意__init__方法的第一参数永远是self,表示创建的实例本身。因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。有了__init__方法,在创建实例的时候就不能传入空的参数了,必须传入与__init__方法相匹配的参数,但self不需要传。
和普通函数相比较,在类中定义的函数只有一点不同,就是第一参数永远是实例变量self,并且,在调用时,不用传递该参数。
2. 正则表达式
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为它匹配了,否则,该字符串就是不合法的。
在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,用\w可以匹配一个字母或数字,所以:
. 可以匹配任意字符,所以:
要匹配变长的字符,在正则表达式中,用 * 表示任意个字符(包括0个),用+表示至少一个字符,用 ?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
要做更精准地匹配,可以用[ ]表示范围,比如:
3. re模块
re模块提供了python全部的正则表达式功能,常用的如下:
(1)re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,匹配成功re.match方法返回一个匹配的对象,否则返回None。
函数语法:re.match(pattern, string, flags=0),pattern为匹配的正则表达式,string为要匹配的字符串,flags为标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
(2)re.search函数
re.search 扫描整个字符串并返回第一个成功的匹配,匹配成功re.search方法返回一个匹配的对象,否则返回None。
函数语法:re.search(pattern, string, flags=0),pattern为匹配的正则表达式,string为要匹配的字符串,flags为标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
re.match与re.search的区别是:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
(3)re.sub函数
用于替换字符串中的匹配项。
函数语法:re.sub(pattern, repl, string, count=0, flags=0) 。pattern为正则中的模式字符串;repl为替换的字符串,也可为一个函数;string为要被查找替换的原始字符串;count为模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
(4)re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:re.compile(pattern[, flags])
(5)findall 函数
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
语法格式为:findall(string[, pos[, endpos]])
(6)re.finditer 函数
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
语法格式为: re.finditer(pattern, string, flags=0)
(7)re.split 函数
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
http://www.runoob.com/python/python-reg-expressions.html
4. datetime模块学习
python中的datetime模块提供了操作日期和时间功能, 该模块提供了五种核心对象:datetime(时间日期类型), date(日期类型), time(时间类型), tzinfo(时区类型), timedelta(时间差类型)。分别如下:
(1)datetime 对象
datetime对象可以用来表示精确的日期和时间,其实例化方法如下
在实例化datetime对象时,year, month, day是必填项,hour, minute, second, microsecond(微秒), tzinfo(时区)是可选项。
(2)date 对象
date对象和datetime对象的区别在于,date对象只能表示日期,不能表示时间(即其精确度为天)。date实例化时须要且仅须要三个参数:year, month, day。date对象是没有时区(tzinfo)属性的。
(3)time对象
和date对象相反,time对象只能用来表示时间,而不能用来表示日期。time对象所表示的时间可以精确到微秒,而且可以具有时区(tzinfo)属性。
python中还有另外一个模块我们经常用到的模块:time,这个模块也含有用来表示时间、日期对象的函数。常用的有time.sleep(), time.time()
(4)timedelta对象
timedelta对象表示一个时间段,timedelta对象可以通过手动实例化得到,也可以通过上述三个对象(datetime, date, time)相减得到。
手动实例化timedelta时,可以传入的参数有:days, seconds, microseconds, milliseconds, minutes, hours, weeks。
(5)tzinfo对象
https://www.jianshu.com/p/1957c4cab0a3
5. http请求
(1)urllib方法
urllib是一个内置在Python标准库中的模块,并使用http.client来实现HTTP和HTTPS协议的客户端。
(2)Requests方法
Requests 抽象了大量的程式化的代码,使得HTTP请求比使用内置urllib库更简单。
get请求,使用方法:r = requests.get(....)
发起post请求,使用方法:r = requests.post(...)
网友评论