一、简单的模块
import time 跟时间有关
time.time() 获取当前时间(从1970年1月1日到现在经过多少秒)
time.sleep(2) 让程序执行到这个位置停2秒
import os 跟程序有关
os.remove(name) 删除这个文件
os.rename(name,name1) 把name文件名改成name1
import urllib 爬虫
from urllib.request import urlopen
from urllib.request import urlopen def get_url(): url = 'http://www.xiaohua100.cn/index.html' def get(): ret = urlopen(url).read() s = print(ret) with open('file','r',encoding='utf-8') as f: f.read(s) return get get_func = get_url() get_func()
二、装饰器
装饰器的作用 :
不想修改函数的调用方式,还想在原来的函数前后添加功能。
原则:开放封闭原则
开放:对扩展是开放的
封闭:对修改是封闭的
封版:函数不得修改,要修改提交申请并写出会有影响的内容。
写一个装饰器函数,对一个函数执行时间进行计算:
import time def timmer(f): #装饰器函数 def inner(*args,**kwargs): start = time.time() ret = f(*args,**kwargs) end = time.time() print(end - start) return ret return inner @timmer # 语法糖 @装饰器函数名 一定在被装饰的函数上一行 def func(s,a): #被装饰的函数 time.sleep(0.1) print('大家好',s,a) # func = timmer(func) func(1,a = 2)
装饰器的基本格式:
def wrapper(func): #qqxing def inner(*args,**kwargs): ret = func(*args,**kwargs) #被装饰的函数 return ret return inner @wrapper #qqxing = wrapper(qqxing) def qqxing(): print(123)
带参数的装饰器
如果不用装饰器,不用删除语法糖,直接修改flag=False即可。
import time flag = True def timmer_out(flag): def timmer(func): def inner(*args,**kwargs): if flag: start = time.time() ret = func(*args,**kwargs) print(time.time() - start) else: ret = func(*args,**kwargs) return ret return inner return timmer @timmer_out(flag) def func(): time.sleep(0.1) print('aaaaa') func()
一个函数有多个语法糖
def wrapper1(func): def inner1(): print('wrapper1 ,before func') ret = func() print('wrapper1 ,after func') return ret return inner1 def wrapper2(func): def inner2(): print('wrapper2 ,before func') ret = func() print('wrapper2 ,after func') return ret return inner2 def wrapper3(func): def inner3(): print('wrapper3 ,before func') ret = func() print('wrapper3 ,after func') return ret return inner3 @wrapper3 @wrapper2 @wrapper1 def f(): print('in f') return '哈哈哈' print(f())
结果:
wrapper3 ,before func
wrapper2 ,before func
wrapper1 ,before func
in f
wrapper1 ,after func
wrapper2 ,after func
wrapper3 ,after func
哈哈哈