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 # 讲解元旦作业 扩展装饰器