本文章是关于六至十节的易忘的内容,相较于一至五节内容偏多。
Python基础篇一至五节
file_one = open('a','b') #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() #关闭文件也会自动修改到文件中去
注:这只是写入到内存里去,并不是文件中,关闭文件时一定要记得保存!!
file_one = open('text.txt','r+')#首先要打开文件 file_one.read() #读取文件 file_one.readline() #读取文件中的一行 file_one.readlines() #读取文件中的多行
文件的读取的便捷形式
每次打开文件都需要关闭,但是使用with可以自动关闭文件
import os os.getcwd() #获取当前路径 os.chdir('a') #切换路径,a:表示的是路径名 os.listdir(path='.') #查看子目录 os.mkdir('file') #创建以file为名的文件夹 os.rename('file','new') #更改文件名
其他方法如下
from datatime import datatime as dt #文件导入 if __name__=='__main__': #对于测试核心代码有很大帮助
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() #一个正在看电视
Preson.play(self) #方法一 super().play() #方法二
ks = HunXue('空山',18) hasattr(ks,'name') #判断属性是否存在 getattr(ks,'name') #有则得到属性值,无责报错 setattr(ks,'name','空空') #设置属性值 delattr(ks,'name') #删除属性值 hasattr(ks,'name')
True '空山' '空空' False
属性调用过程
这个魔法方法和下面的协议对于初学者有一点难理解。
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): #用来改变直接打印时的样子
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}'
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
在不改变函数的前提下,给函数增加功能。
#语法格式 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
装饰器执行步骤
三种内置装饰器
yige = Person() yige.play #property装饰器 yige.eat() #classmethod装饰器 yige.sleep() #staticmethod装饰器
一个正在玩游戏,哈哈哈~~~ <class '__main__.Person'>需要学习,emm~~~ 人都需要睡觉
语法规则
try: pass #可能出现异常的代码 except Exception: raise Exception #抛出异常或者返回异常 else: pass #没有报错就会执行 finally: pass #以上执行完就会执行这个
注:
assert:断言,与if类似,只是判断为False时,会报错。
import re phone = input('请输入手机号') re = findall(r'^13\d{9}$',phone)
^表示的是开头,$表示的是结尾,r取消字符串转义
re.findall()获取所有符合规则的内容,并返回到列表中去。
.可以匹配任意字符,但在没有规定匹配次数的前提下,只能匹配一个。
正则默认是一行一行匹配的
加入参数re.S后就会所有一起匹配
1.第一个为最小次数,第二个为最大次数 2.一个默认为最大次数 3.从1次起 4.0次到2次
1.0次到多次 2.1次到多次 3.0次到1次
注: