1 '''
2 所用知识点:
3 1.作用域 :L>E>G>B
4 2.高阶函数:
5 满足两个条件中的一个就行:
6 1.函数名可以作为参数输入
7 2.函数名可以作为返回值
8 3.闭包
9
10 '''
11
12
13 '''
14 闭包
15 python中的闭包从表现形式上定义为:
16 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,
17 那么内部函数就被称为闭包。
18 '''
19 # def out1():
20 # x = 10
21 # def in1(): # 内部函数
22 # y = 1
23 # print(x) # 对外部作用域的变量进行引用
24 # return in1 # 内部函数in1称之为闭包
25 #
26 # # 调用in1()
27 # # 方法一
28 # out1()()
29 # # 方法二
30 # p = out1()
31 # p()
32 # #
33 # # in1() # 局部变量,全局无法调用
34 # #
35 #
36 '''
37 闭包 = 函数块(内部函数) + 定义函数时的环境(变量引用)
38 '''
39 #
40 # import time
41 #
42 # # start = time.time() # 开始时间
43 # # time.sleep(1) # 间歇时间,间歇1s
44 # # end = time.time() # 结束时间
45 #
46 # def p1():
47 # # print(start) # 从1970-01-01开始计算秒数
48 # st1 = time.time()
49 # print('Hello World')
50 # time.sleep(5)
51 # end1 = time.time()
52 # print('花费了 %s 秒'%(end1 - st1))
53 # p1()
54 #
55 '''
56 。。。。。。
57 n多个类似需要计算时间的函数
58 此时为了方便起见,创建一个专门用于计算时间的函数
59 '''
60 #
61 # def showtime(x):
62 # start2 = time.time()
63 # x()
64 # end2 = time.time()
65 # print('程序花费了 %s 秒' % (end2-start2))
66 #
67 # def test():
68 # time.sleep(2)
69 # print('Yeah')
70 #
71 # showtime(test)
72 #
73 '''
74 装饰器:
75 为之前的函数添加新的功能
76 '''
77 #
78 #
79 # def showt(c):
80 # def a():
81 # start2 = time.time()
82 # c()
83 # end2 = time.time()
84 # print('程序花费了 %s 秒' % (end2 - start2))
85 # return a
86 #
87 # @showt # 等价于z = showt(test1)
88 # # 但要放在函数之前
89 # def test1():
90 # time.sleep(1)
91 # print(123)
92 # test1()
93 #
94 #
95 '''
96 被装饰器修饰的参数
97 '''
98 #
99 # def fun1(x):
100 # def in_fun1(*y,**z):
101 # start = time.time()
102 # x(*y,**z)
103 # end = time.time()
104 # print('此程序用了%s秒' % (end-start))
105 # return in_fun1
106 #
107 # @fun1
108 #
109 # def fun2(*a,**b):
110 # Sum = 0
111 # for i in a:
112 # Sum += i
113 # print(Sum)
114 # time.sleep(2)
115 # fun2(3,5,1)
116 #
117 #
118 # # 功能函数加参数
119 # def loge(s=''):
120 # def fun3(q):
121 # def infun3(*x,**y):
122 # start = time.time()
123 # q(*x,**y)
124 # end = time.time()
125 # print('%s 秒' % (end-start))
126 # if s == 'true':
127 # print('loge !!!')
128 # return infun3
129 # return fun3
130 #
131 # @loge('true') # 中间的参数‘true’可以写成其他的,只不过不会出来loge
132 # def test3():
133 # print('test3')
134 # time.sleep(1)
135 # test3()