python基础(五)

python基础(五)

1. 类和对象

(1) python是一门面向对象的语言
类:类是用来描述具有相同属性和方法的聚合,方法是类的实例
对象:对象是类定义的数据结构的实例

#创建类
class apple:
	'''类文档字符串'''
	count = 0 ## 类变量,这个变量在所有类实例中共享,类似于c++中的静态变量
	def __init__(self, color, weight): 
		'''__init__()是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例就会调用该方法'''
		self.color = color
		self.weight = weight
		apple.count += 1
	
	def print_weight(self):
		'''self代表类的实例,在定义类的方法时必须带有,但在调用时不必传参'''
		print(weight)
		
	apple1 = apple('green', 100) ## 定义一个 apple 类实例
	apple1.print_weight() ## 调用函数 点号用来访问对象的属性

(2) python内置类属性
__dict__:类的属性,包含一个字典,由类的数据属性组成
__doc__:类的文档字符串
__name__:类名
__module__:类定义所在的模块,如apple类,类的全名为__main__.apple,如果该类处于一个导入模块fruit中,则apple.__module__等于fruit
__bases__:类的所有父类构成元素,(包含了一个由所有父类组成的元组)
(3) 类的继承

class fruit:
	def __init__(self, name):
		self.name = name

	def print_name(self):
		print('fruit name is : ' + self.name)
		
class apple(fruit): ## class 派生类(父类)
	def print_name(self):
		print('apple name is : ' + self.name)

apple1 = apple('apple1')
apple1.print_name() ## 调用子类的方法 输出:apple name is : apple1

(4) 类属性与方法
类的私有属性:以两个下划线开头来表明该属性是私有属性,不能在类外访问
类的私有方法:以两个下划线开头来表明该属性是私有方法,不能在外部调用

class apple:
	__name = ''
	count = 0
	def __init__(self, name):
		self.__name = name
	
	def __private_func(self):
		self.__name = self.__name + '!!!'
	
	def public_funcr(self):
		self.__private_func()

apple1 = apple('apple1')
apple1.__private_func() ## 错误,不能在外部调用
apple1.count = apple1.count + 1 ## 正确,可以在外部调用

在这里插入图片描述

2. 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
正则表达式特殊字符:
在这里插入图片描述
限定符:
在这里插入图片描述
定位符:
在这里插入图片描述

3. re模块

在python中可以使用内置的re模块来使用正则表达式
re模块的一般使用步骤如下:
1.使用 compile 函数将正则表达式的字符串形式编译为一个 pattern 对象
2.通过 pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个 match 对象)
3.最后使用 match 对象提供的属性和方法获得信息,根据需要进行其他操作

(1) re.match()

re.match(pattern, string, flags = 0)
## pattern 为匹配的正则表达式,string 为要匹配的字符,flags 用于控制正则表达式匹配的方式
## 返回一个匹配的对象 否则返回 None

print(re.match('app', 'apple').span()) ## 在起始位置匹配
print(re.match('app', 'bananaapp')) ## 不在起始位置匹配
结果为:
(0, 3)
None

(2) re.search()
该方法扫描整个字符串并返回第一个成功的匹配

re.search(pattern, string, flags = 0)

print(re.search('abc', 'abcabcacb==s').span())
print(re.search('cba', 'skskkskkscba'))
print(re.search('z', 'aaaaa'))
输出结果:
(0, 3)
<re.Match object; span=(9, 12), match='cba'>
None

re.match 只匹配字符串的开始位置,re.search 匹配整个字符串

(3) re.compile
compile 函数用于编译正则表达式,生成一个正则表达式(pattern)对象,供 match() 与 search() 两个函数使用

re.compile(pattern[, flags])

import re
pattern = re.compile(r'\d+') # 用于匹配至少一个数字
m = pattern.match('asd23asd', 3, 10)
m.span()
## (3, 5)

m = pattern.search('asd23asd')
m.span()
## (3, 5)

(4) re.finditer()
在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

re.finditer()

import re
it = re.finditer(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match.group() )
输出结果:
12
32
43
3

(5) 正则表达式模式

模式描述
^匹配字符串的开头
$匹配字符串的末尾
.匹配任意字符,除了换行符
[…]用开表示一组符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re*匹配0个或多个的表达式
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}精确匹配 n 个前面表达式。例如,o{2}不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个 o
re{ n,}匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a|b匹配a或b
(re)匹配括号内的表达式,也表示一个组
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re)类似 (…), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#…)注释.
(?= re)前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re)匹配的独立模式,省去回溯。
\w匹配字母数字及下划线
\W匹配非字母数字及下划线
\s匹配任意空白字符,等价于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9].
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z匹配字符串结束
\G匹配最后匹配完成的位置。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n, \t, 等.匹配一个换行符。匹配一个制表符。等
\1…\9匹配第n个分组的内容。
\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

4. datetime 模块(原博客)

datetime模块的属性及方法
在这里插入图片描述
(1) 获取datetime

import datetime
datetime.datetime.now() ## 当前 datetime 结果为:2019-05-17 19:36:03.097352
datetimw.date.today() ## 今天的datetime 结果为:2019-05-17
datetime.date.today() + datetime.timedelta(days=1) ## 获取明天,结果为:2019-05-18
datetime.datetime.now() - datetime.timedelta(days=3) ## 获取三天前,结果为:2019-05-14

(2) datetime与别的类型的格式转换

## datetime <=> string
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") ## datetime => string
datetime.datetime.strptime("2019-05-18 19:50:10", "%Y-%m-%d %H:%M:%S") ## string => datetime

## datetime <=> timestamp
timestamp = time.mktime(datetime.datetime.now().timetuple()) ## datetime => timestamp
datetime.datetime.fromtimestamp(1558094438.0) ## timestamp => datetime

5. http请求

http 请求方法:

序号方法描述
1GET请求指定的页面信息,并返回实体主体
2HEAD类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能
8TRACE回显服务器收到的请求,主要用于测试或诊断
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值