Python遗忘知识点第二节
Python基础篇六至十节
本文章是关于六至十节的易忘的内容,相较于一至五节内容偏多。
Python基础篇一至五节
六、文件
1.文件的打开关闭
file_one = open('a','b') #a:文件名称,b:文件的打开模式
常见的文件打开模式有:
- r:只读
- w:只写,但在该模式下每次打开文件,都会清空之前的内容!!
- a:追加
- b:以二进制的形式打开
- +:更新(读和写)
file_one.write('this is python') #一次只能写一个。
flie_one.writelines('hello,python\n','I heart you\n','day day up') #一次写入多行内容
file_one.flush() #保存内容到文件
file_one.close() #关闭文件也会自动修改到文件中去
注:这只是写入到内存里去,并不是文件中,关闭文件时一定要记得保存!!
2.文件的读取
file_one = open('text.txt','r+')#首先要打开文件
file_one.read() #读取文件
file_one.readline() #读取文件中的一行
file_one.readlines() #读取文件中的多行
文件的读取的便捷形式
每次打开文件都需要关闭,但是使用with可以自动关闭文件
3.文件的目录操作
import os
os.getcwd() #获取当前路径
os.chdir('a') #切换路径,a:表示的是路径名
os.listdir(path='.') #查看子目录
os.mkdir('file') #创建以file为名的文件夹
os.rename('file','new') #更改文件名
其他方法如下
4.路径
from datatime import datatime as dt #文件导入
if __name__=='__main__': #对于测试核心代码有很大帮助
七、面向对象初级
1.类的基本
class Person(): #类的定义
def __init__(self,name,age,sex='0'):
self.name = name
self.age = age
self.sex = sex
def play(self):
print(f'{self.name}正在看电视'
bd = Pesron('一个',18) #实例化
bd.name #一个
bd.play() #一个正在看电视
- self是实例自己,在该例子中也就是bd
- __init__是初始化函数,实例初始化时自动调用
- 通过.来进行属性和方法的操作
2.类的继承与重用
- 多重继承会有顺序
- 类继承后,若想调用父类的方法有两种方式
Preson.play(self) #方法一
super().play() #方法二
八、面向对象高级
1.内置函数
ks = HunXue('空山',18)
hasattr(ks,'name') #判断属性是否存在
getattr(ks,'name') #有则得到属性值,无责报错
setattr(ks,'name','空空') #设置属性值
delattr(ks,'name') #删除属性值
hasattr(ks,'name')
True
'空山'
'空空'
False
属性调用过程
2.魔法方法
这个魔法方法和下面的协议对于初学者有一点难理解。
1. 单例模式
#单例模式,只有一个实例存在,不会有多个实例。
class Earth():
def __new__(cls):
if not hasattr(cls,'_instance'):
cls._instance=super().__new__(cls)
return cls._instance
def __init__(slef):
self.name = 'earth'
def __str__(self): #用来改变print打印时的样子
def __repr__(self): #用来改变直接打印时的样子
3.协议
1.序列协议
class IndexTuple:
def __init__(self,*args):
self.values = tuple([x for x in args])
self.index = tuple(enumerate(self.values))
def __len__(self):
return len(self.values)
def __getitem__(self,key):
return self.index[key]
def __repr__(self):
return str(self.values)
my = IndexTuple(1,'a','b',3,5)
len(my) #5
my[1] #'a'
2.迭代器协议
class Number:
def __init__(self,end=10):
self.start = 0
self.end = end
def __iter__(self):
return self
def __next__(self):
self.start += 1
if self.start >= self.end:
raise StopIteration
return self.start
nu = Number()
next(nu)
next(nu)
1
2
注:只要实现了__iter__和__next__方法,就是迭代器。
3.上下文协议
import time
class RunTime:
def __enter__(self):
self.start_time = time.time()
return self.starttime
def __exit__(self,a,b,c):
self.end_time = time.time()
self.run_time = self.endtime-self.start_time
print(f'Time consuming {self.run_time}'
九、生成装饰器和异常
1.生成器
def fibona(end):
n,a,b=0,0,1
while n<end:
a,b = b,a+b
yield b
n += 1
a = fibona(10)
next(a)
1
- 利用yield可以让一个函数变成一个迭代器
- yield拥有与return一样的功能,可以返回值
- 但会暂停函数的执行,直到下一次next()执行
2.装饰器
在不改变函数的前提下,给函数增加功能。
#语法格式
def 装饰器函数名(参数):
def 功能函数名():
功能
return 功能函数名
#使用装饰器
在定义的函数前加@装饰器函数名
def variables(func):
def f(*args,**kwargs):
print(args,**kwargs)
values = func(*args,**kwargs)
return values
return f
@variables
def f1(end):
return end+1
装饰器执行步骤
- 将f1这个函数作为参数传给func,f1=func
- 执行f()函数,end传入到*args里面
- 如果想实现函数本身的功能,则在f中加入func()
三种内置装饰器
yige = Person()
yige.play #property装饰器
yige.eat() #classmethod装饰器
yige.sleep() #staticmethod装饰器
一个正在玩游戏,哈哈哈~~~
<class '__main__.Person'>需要学习,emm~~~
人都需要睡觉
3.异常
语法规则
try:
pass #可能出现异常的代码
except Exception:
raise Exception #抛出异常或者返回异常
else:
pass #没有报错就会执行
finally:
pass #以上执行完就会执行这个
注:
- try后必须跟上except
- except只有在函数中才能使用return
- finally不管是否发生异常都会执行
- raise主动抛出异常
assert:断言,与if类似,只是判断为False时,会报错。
十、正则
1.元字符
2.通配符
import re
phone = input('请输入手机号')
re = findall(r'^13\d{9}$',phone)
-
^表示的是开头,$表示的是结尾,r取消字符串转义
-
re.findall()获取所有符合规则的内容,并返回到列表中去。
-
.可以匹配任意字符,但在没有规定匹配次数的前提下,只能匹配一个。
-
正则默认是一行一行匹配的
-
加入参数re.S后就会所有一起匹配
3.转义符
4.次数匹配
1.第一个为最小次数,第二个为最大次数
2.一个默认为最大次数
3.从1次起
4.0次到2次
1.0次到多次
2.1次到多次
3.0次到1次
5.贪婪匹配与非贪婪匹配
6.集合
注:
- 匹配r或者e
- 匹配0-9之间的任意一个数字或者a-z之间的任意一个字母
- 不匹配a-z里面的任何一个
- 匹配一个字的中文
- 匹配两个字的中文
7.分组匹配