Python基础学习-Day5

1. 类和对象

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
**类变量:**类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
**对象:**通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾:

class Cat():
'类的帮助信息'   #类文档字符串
    def __init__(self,name,age)
    self.name=name
    self.age=age
    def sit(self):
        print()
    def roll_over(self):
        print()

a.方法__init__()
类中的函数称为方法:你前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要的差别是调用方法的方式。init() 是一个特殊的方法,每当你根
据类创建新实例时,Python 都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免 Python 默认方法与普通方法发生名称冲突。
将方法 init() 定义成了包含三个形参:self,name和age。在这个方法的定义中,形参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包
含形参self呢?因为 Python 调用这个 init() 方法来创建实例时,将自动传入实参self,每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身
的引用,让实例能够访问类中的属性和方法。我们创建类实例时, Python 将调用 类的方法 init() 。我们将通过实参向Cat() 传递名字和年龄;self会自动传递,因此我们不需要传递它。
类还定义了另外两个方法:sit() 和roll_over()。由于这些方法不需要额外的信息,因此它们只有一个形参 self 。我们后面将创建的实例能够访问这些方法。
b,根据类创建实例
1)访问属性:要访问实例的属性,可使用句点表示法。
my_cat=Cat{‘doudou’,3}
my_cat.name
2)调用方法
my_cat=Cat{‘doudou’,3}
my_cat.sit()
my_cat.roll_over()
3)创建多个实例:
my_cat=Cat{‘doudou’,3}
your_cat=Cat{‘tudou’,2}
my_cat.sit()
your_cat.roll_over()
c.修改属性值
要修改属性的值,最简单的方式是通过实例直接访问它。还可以通过方法修改属性的值。 通过方法对属性的值进行递增。

2. 正则表达式

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。
下面列出了Python支持的正则表达式元字符和语法:
‘.’ 匹配所有字符串,除\n以外
‘-’ 表示范围[0-9]
'’ 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
‘+’ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +
‘^’ 匹配字符串开头
‘$’ 匹配字符串结尾 re
‘’ 转义字符, 使后一个字符改变原来的意思
匹配前面的字符0次或多次 re.findall("ab",“cabc3abcbbac”)结果:[‘ab’, ‘ab’, ‘a’]
‘?’ 匹配前一个字符串0次或1次 re.findall(‘ab?’,‘abcabcabcadf’)结果[‘ab’, ‘ab’, ‘ab’, ‘a’]
‘{m}’ 匹配前一个字符m次 re.findall(‘cb{1}’,‘bchbchcbfbcbb’)结果[‘cb’, ‘cb’]
‘{n,m}’ 匹配前一个字符n到m次 re.findall(‘cb{2,3}’,‘bchbchcbfbcbb’)结果[‘cbb’]
‘\d’ 匹配数字,等于[0-9] re.findall(’\d’,‘电话:10086’)结果[‘1’, ‘0’, ‘0’, ‘8’, ‘6’]
‘\D’ 匹配非数字,等于[^0-9] re.findall(’\D’,‘电话:10086’)结果[‘电’, ‘话’, ‘:’]
‘\w’ 匹配字母和数字,等于[A-Za-z0-9] re.findall(’\w’,‘alex123,./;;;’)结果[‘a’, ‘l’, ‘e’, ‘x’, ‘1’, ‘2’, ‘3’]
‘\W’ 匹配非英文字母和数字,等于[^A-Za-z0-9] re.findall(’\W’,‘alex123,./;;;’)结果[’,’, ‘.’, ‘/’, ‘;’, ‘;’, ‘;’]
‘\s’ 匹配空白字符 re.findall(’\s’,'3
ds \t\n’)结果[’ ‘, ‘\t’, ‘\n’]
‘\S’ 匹配非空白字符 re.findall(’\s’,‘3ds \t\n’)结果[‘3’, '’, ‘d’, ‘s’]
‘\A’ 匹配字符串开头
‘\Z’ 匹配字符串结尾
‘\b’ 匹配单词的词首和词尾,单词被定义为一个字母数字序列,因此词尾是用空白符或非字母数字符来表示的
‘\B’ 与\b相反,只在当前位置不在单词边界时匹配
‘(?P…)’ 分组,除了原有编号外在指定一个额外的别名 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{8})",“371481199306143242”).groupdict(“city”) 结果{‘province’: ‘3714’, ‘city’: ‘81’, ‘birthday’: ‘19930614’}
[] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。

3. re模块

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
(1).re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:

参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

匹配成功re.match方法返回一个匹配的对象,否则返回None。
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
(2).re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
函数参数说明:

参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

匹配成功re.search方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
(3).compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern[, flags])
参数:
pattern : 一个字符串形式的正则表达式
flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . ‘不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和’ # '后面的注释
(4).findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式为:
findall(string[, pos[, endpos]])
参数:
string 待匹配的字符串。
pos 可选参数,指定字符串的起始位置,默认为 0。
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
(5).re.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
参数:

参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

(6).re.split
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
参数:

参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

4.datetime模块学习

Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、datetime模块和calendar模块。其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致。time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大。
datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。
1.datetime模块中定义的类
datetime模块定义了以下几个类:
datetime.date:表示日期,常用的属性有:year, month和day
datetime.time:表示时间,常用属性有:hour, minute, second, microsecond
datetime.datetime:表示日期时间
datetime.timedelta:表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒
datetime.tzinfo:时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。
datetime.timezone:Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量
需要说明的是:这些类的对象都是不可变的。
2.datetime模块中定义的常量
datetime.MINYEAR:datetime.date或datetime.datetime对象所允许的年份的最小值,值为1
datetime.MAXYEAR:datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999
3.对象方法和属性
d.year:年
d.month:月
d.day:日
d.replace(year[, month[, day]]):生成并返回一个新的日期对象,原日期对象不变
d.timetuple():返回日期对应的time.struct_time对象
d.toordinal():返回日期是是自 0001-01-01 开始的第多少天
d.weekday():返回日期是星期几,[0, 6],0表示星期一
d.isoweekday():返回日期是星期几,[1, 7], 1表示星期一
d.isocalendar():返回一个元组,格式为:(year, weekday, isoweekday)
d.isoformat():返回‘YYYY-MM-DD’格式的日期字符串
d.strftime(format):返回指定格式的日期字符串,与time模块的strftime(format, struct_time)功能相同

5. http请求

Python3处理HTTP请求的包:http.client,urllib,urllib3,requests
其中,http 比较 low-level,一般不直接使用。
urllib更 high-level一点,属于标准库。urllib3跟urllib类似,拥有一些重要特性而且易于使用,但是属于扩展库,需要安装。
requests 基于urllib3 ,也不是标准库,但是使用非常方便。
import http.client
http_client = http.client.HTTPConnection(‘localhost’,8080,timeout=10)
http_client.request(‘get’,’/jenkins/api/json?pretty=true’)
response = http_client.getresponse()
print(response.status)
print(response.read())
import urllib.request
response = urllib.request.urlopen(‘http://localhost:8080/jenkins/api/json?pretty=true’)
print(response.status)
print(response.read())
import urllib3
response = urllib3.PoolManager().request(‘get’,‘http://localhost:8080/jenkins/api/json?pretty=true’)
print(response.status)

import requests
response = requests.get(‘http://localhost:8080/jenkins/api/json?pretty=true’)
print(response.status_code)
print(response.text)
print(response.json())
print(response.reason)

import requests
from requests.auth import HTTPBasicAuth
response = requests.post(‘http://localhost:8080/jenkins/job/check_python_version/build’,auth=(‘admin’,'wangmin’))
print (response.status_code)
print (response.reason)
print(response.headers)

本资料仅为学习总结之用。
参考资料:
https://www.runoob.com/regexp/regexp-tutorial.html
https://blog.csdn.net/hacker2025/article/details/73252600/
https://blog.csdn.net/gty931008/article/details/80254806
《Python编程:从入门到实践》
菜鸟教程:Python编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值