day2(装饰器,开放封闭原则和装饰器的作用,固定模式)

1.day1知识点复习

 三元运算符
 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果
 接收结果的变量 = “真结果” if 条件 else “假结果”

# 命名空间 和 作用域
# 三种:内置 全局 局部
# 作用域:全局 局部 globals() locals()
#         global  在局部声明一个全局变量
#         nonlocal 在局部声明最近的上一层局部中的变量
# 作用域链 : 小范围用变量的时候,先从自己的名字空间找,
#             找不到就一层一层向外层找,知道找到为止。
#             找不到就报错。
# 函数的嵌套调用和嵌套定义
#     定义在函数内部的函数不能被外界直接调用
#     内部函数可以使用外部的变量
# 函数名的本质
#     就是一串内存地址
#     可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象

# 闭包 : 内部函数使用外部函数的变量
def outer():
    a = 1
    def inner():
        print(a)
    return inner

i = outer()
i()

二,作业

 1、写函数,接收n个数字,求这些参数数字的和。
def sum_func(*args):
	total = 0
	for i in args:
		total += i
	return total
print(sum_func(1,2,3,8,23,6))

 2、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
 	a=10
 	b=20
 	def test5(a,b):
      	print(a,b)
 	c = test5(b,a)
 	    print(c)
//20,10,null

 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
 	a=10
 	b=20
 	def test5(a,b):
 		a=3
 		b=5
      	print(a,b)
 	c = test5(b,a)
 	print(c)
//3,5,null
 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数
 装饰器的作用
 原则 :开放封闭原则
 语法糖 :@
 装饰器的固定模式

不懂技术
import time
print(time.time())  获取当前时间
time.sleep(10)  让程序在执行到这个位置的时候停一会儿


 def timmer(f):    装饰器函数
     def inner():
         start = time.time()
         ret = f()       被装饰的函数
         end = time.time()
         print(end - start)
         return ret
     return inner

 @timmer         语法糖 @装饰器函数名
 def func():     被装饰的函数
     time.sleep(0.01)
     print('老板好同事好大家好')
     return '新年好'
 func = timmer(func)
 ret = func()   #inner()
 print(ret)
 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
 timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用

 原则: 开放封闭原则
 开放 : 对扩展是开放的
 封闭 : 对修改是封闭的

 封版
 def outer():
     def inner():
         return 'inner'
     inner()
 outer()

装饰带参数函数的装饰器
 def timmer(f):    装饰器函数
     def inner(*args,**kwargs):
         #(1,2) /(1)
         start = time.time()
         ret = f(*args,**kwargs)  #f(1,2)       被装饰的函数
         end = time.time()
         print(end - start)
         return ret
     return inner

 @timmer         语法糖 @装饰器函数名
 def func(a,b):     被装饰的函数
     time.sleep(0.01)
     print('老板好同事好大家好',a,b)
     return '新年好'

 @timmer         语法糖 @装饰器函数名
 def func1(a):     被装饰的函数
     time.sleep(0.01)
     print('老板好同事好大家好',a)
     return '新年好'
 func = timmer(func)
 ret = func(1,2)   #inner()
 ret = func(1,b = 2)   #inner()
 print(ret)

 def wrapper(f):    #装饰器函数,f是被装饰的函数
     def inner(*args,**kwargs):
         '''在被装饰函数之前要做的事'''
         ret = f(*args,**kwargs)    #被装饰的函数
         '''在被装饰函数之后要做的事'''
         return ret
     return inner

 @wrapper         语法糖 @装饰器函数名
 def func(a,b):     被装饰的函数
     time.sleep(0.01)
     print('老板好同事好大家好',a,b)
     return '新年好'

 def wrapper():
     def inner():
         pass
     return inner

def wrapper(func):   qqxing
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)   被装饰的函数
        return ret
    return inner

@wrapper        qqxing = wrapper(qqxing)
def qqxing():
    print(123)
ret = qqxing()   #inner

猜你喜欢

转载自blog.csdn.net/qq_36227329/article/details/81148742