学习python课程第十二天
2021-06-18 14:12
标签:return rom == 开放封闭原则 home int oca pytho 展开 一。 装饰器: 装饰器本身可以是任意可调用的对象=>函数 目标:写一个函数来为另外一个函数添加新功能 2 为何要用装饰器 对扩展开发: 装饰器就是要在不修改功能源代码以及调用方式的前提下为原功能添加额外新的功能 ‘‘‘ def index(): def outter(func): index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址 二。装饰器的修正: def index(): #============================================================== index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址 res=index() #res=wraper() def index(): def home(name): #============================================================== index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址 home(‘egon‘) #wrapper(‘egon‘) 四。装饰器的语法糖: import time @timmer @timmer print(help(index)) (经过处理。index.跟老的lindex的名字,注释。都完全相同) func() func() global: 在局部声明变量是全局变量 func() nonlocal:在局部声明变量是外层函数的变量 f1() 学习python课程第十二天 标签:return rom == 开放封闭原则 home int oca pytho 展开 原文地址:https://www.cnblogs.com/lvyipin1/p/9715533.html1 什么是装饰器
器=>工具
装饰=>指的是为被装饰对象添加新功能
被装饰的对象也可以是任意可调用的对象=>函数
开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放
对修改封闭:
1. 不能修改功能的源代码
2. 也不能修改功能的调用方式
可以为原有的功能添加新的功能
3 如何用装饰器
import time
print(‘welcome to index page‘)
time.sleep(3)
# func=最原始那个index的内存地址
def wrapper():
start=time.time()
func() # 最原始那个index的内存地址()
stop=time.time()
print(‘run time is %s‘ %(stop-start))
return wrapper
index() #wraper()import time
print(‘welcome to index page‘)
time.sleep(3)
return 123
def outter(func):
# func=最原始那个index的内存地址
def wrapper():
start=time.time()
res=func() # 最原始那个index的内存地址()
stop=time.time()
print(‘run time is %s‘ %(stop-start))
return res
return wrapper
#==============================================================
print(res)
三。装饰器的修正2:import time
print(‘welcome to index page‘)
time.sleep(3)
return 123
print(‘welcome %s to home page‘ %name)
time.sleep(1)
def outter(func):
# func=最原始那个home的内地址
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print(‘run time is %s‘ %(stop-start))
return res
return wrapper
home=outter(home) #index=outter(最原始那个home的内地址) #home=wrapper函数的内地址
#==============================================================
index() #wrapper()
装饰器的名字,要在被装饰对象的正上方单独一行写上。from functools import wraps
def timmer(func): # func=最原始那个home的内地址
@wraps(func)
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print(‘run time is %s‘ %(stop-start))
return res
return wrapper
def index():
"""这是index功能"""
print(‘welcome to index page‘)
time.sleep(3)
return 123
def home(name):
"""这是home功能"""
print(‘welcome %s to home page‘ %name)
time.sleep(1)
print(index.__name__)五。有参数装饰器
在函数内部需要一个参数,但是自己的参数不能改变的时候,就要在外面再包一层函数来传给需要参数的函数。
六。global与nonlocal:x=1
def func():
x=2
print(x)
x=[]
def func():
x.append(1)
x.append(2)
x.append(3)
print(x)
x=1
def func():
global x
x=2
print(x)x=333
def f1():
x=222
def f2():
x=111
def f3():
nonlocal x
x=0
f3()
print(‘f2内部的x: ‘,x)
f2()
print(‘这是f1内部的x: ‘,x)
print(x)