1.day 10 内容复习
# 之前做得的题 以后再遇到能保证会 # 下周二考 :所有的知识 # 面试题:认真对待 # # 三元运算符 # 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果 # 接收结果的变量 = “真结果” if 条件 else “假结果” # # 命名空间 和 作用域 # 三种:内置 全局 局部 # 作用域:全局 局部 globals() locals() # global 在局部声明一个全局变量 # nonlocal 在局部声明最近的上一层局部中的变量 # 作用域链 : 小范围用变量的时候,先从自己的名字空间找, # 找不到就一层一层向外层找,知道找到为止。 # 找不到就报错。 # 函数的嵌套调用和嵌套定义 # 定义在函数内部的函数不能被外界直接调用 # 内部函数可以使用外部的变量 # 函数名的本质 # 就是一串内存地址 # 可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象 # 闭包 : 内部函数使用外部函数的变量 def outer(): a = 1 def inner(): print(a) return inner i = outer() i()
2.作业讲解
1 # 2、写函数,接收n个数字,求这些参数数字的和。 2 def sum_func(*args): 3 total = 0 4 for i in args: 5 total += i 6 return total 7 print(sum_func(1,2,3,8,23,6)) 8 9 # 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么? 10 # a=10 11 # b=20 12 # def test5(a,b): 13 # print(a,b) 14 # c = test5(b,a) 15 # print(c) 16 17 18 19 # 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么? 20 # a=10 21 # b=20 22 # def test5(a,b): 23 # a=3 24 # b=5 25 # print(a,b) 26 # c = test5(b,a) 27 # print(c)
3.装饰器
1 # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数 2 # 装饰器的作用 3 # 原则 :开放封闭原则 4 # 语法糖 :@ 5 # 装饰器的固定模式 6 7 #不懂技术 8 9 10 import time 11 # print(time.time()) # 获取当前时间 12 # time.sleep(10) #让程序在执行到这个位置的时候停一会儿 13 14 15 # def timmer(f): #装饰器函数 16 # def inner(): 17 # start = time.time() 18 # ret = f() #被装饰的函数 19 # end = time.time() 20 # print(end - start) 21 # return ret 22 # return inner 23 # 24 # @timmer #语法糖 @装饰器函数名 25 # def func(): #被装饰的函数 26 # time.sleep(0.01) 27 # print('老板好同事好大家好') 28 # return '新年好' 29 # # func = timmer(func) 30 # ret = func() #inner() 31 # print(ret) 32 # 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能 33 # timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用 34 35 # 原则: 开放封闭原则 36 # 开放 : 对扩展是开放的 37 # 封闭 : 对修改是封闭的 38 39 # 封版 40 41 # def outer(): 42 # def inner(): 43 # return 'inner' 44 # inner() 45 # 46 # outer() 47 48 #装饰带参数函数的装饰器 49 # def timmer(f): #装饰器函数 50 # def inner(*args,**kwargs): 51 # #(1,2) /(1) 52 # start = time.time() 53 # ret = f(*args,**kwargs) #f(1,2) #被装饰的函数 54 # end = time.time() 55 # print(end - start) 56 # return ret 57 # return inner 58 # 59 # @timmer #语法糖 @装饰器函数名 60 # def func(a,b): #被装饰的函数 61 # time.sleep(0.01) 62 # print('老板好同事好大家好',a,b) 63 # return '新年好' 64 # 65 # @timmer #语法糖 @装饰器函数名 66 # def func1(a): #被装饰的函数 67 # time.sleep(0.01) 68 # print('老板好同事好大家好',a) 69 # return '新年好' 70 # # func = timmer(func) 71 # ret = func(1,2) #inner() 72 # ret = func(1,b = 2) #inner() 73 # print(ret) 74 75 76 #装饰器的固定格式 77 # def wrapper(f): #装饰器函数,f是被装饰的函数 78 # def inner(*args,**kwargs): 79 # '''在被装饰函数之前要做的事''' 80 # ret = f(*args,**kwargs) #被装饰的函数 81 # '''在被装饰函数之后要做的事''' 82 # return ret 83 # return inner 84 # 85 # @wrapper #语法糖 @装饰器函数名 86 # def func(a,b): #被装饰的函数 87 # time.sleep(0.01) 88 # print('老板好同事好大家好',a,b) 89 # return '新年好' 90 #第一步 91 # def wrapper(): 92 # def inner(): 93 # pass 94 # return inner 95 #第二部填充 96 def wrapper(func): #qqxing 97 def inner(*args,**kwargs): 98 ret = func(*args,**kwargs) #被装饰的函数 99 return ret 100 return inner 101 102 @wrapper #qqxing = wrapper(qqxing) 103 def qqxing(): 104 print(123) 105 106 ret = qqxing() #inner 107 108 # 109 # 讲解元旦作业 扩展装饰器