闭包函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包函数相关的知识,希望对你有一定的参考价值。
命名空间
命名空间也叫做名称空间
什么内置名称空间:人家直接写好的,我们直接就可以调用的,就叫做内置名称空间
什么是全局变量:除了函数内部定义的内容外,自己写的代码就叫做全局变量
什么是局部变量:在函数内部定义的内容,就叫做局部名称空间
1
2
3
4
5
6
7
8
9
10
|
a = 1 #全局变量 def func(): a = 2 #局部变量 def func1(): a = 3 #局部里的局部变量 print (a) func1() print (a) #print:就属于内置的名称空间 func() print (a) |
在全局是不可以直接调用局部的变量,局部变量只能在低于该层和该层的函数去调用,而在局部是可以调用全局的变量的。
1
2
3
4
5
6
7
8
|
a = 1 #全局变量 def func(): def func1(): print (a) func1() print (a) func() print (a) |
在全局内部可以同时创建多个同等级的局部命名空间,而这些命名空间之间是没有关系的。
1
2
3
4
5
6
7
8
|
a = 1 def wahaha(): a = 2 print (a) def shuangwaiwai(): print (a) wahaha() shuangwaiwai() |
对于局部来说,需要调用一个内容时,首先是要在该层寻找,该层有就用该层的,没有就会向全局的方向一层一层的寻找,直到找到了为止。
加载顺序:启动python——>内置命名空间——>全局命名空间(从上到下加载顺序)——>局部命名空间(调用的时候才开始加载)
内置命名空间是在任意地方都可以调用;全局命名空间只能是在自己写的代码里使用;局部只能在当前函数里调用。
global:就是在局部里面修改全局的变量值
1
2
3
4
5
6
7
8
9
10
11
|
# a=0 # def aa(): # a=1 # def bb(): # global a #global:在局部变量修改全局变量的值 # a=2 # print(a) # bb() # print(a) # aa() # print(a) |
nonlocal:只修改局部的变量值,从该层的上一层一层一层的查找,找到第一个并修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# a=0 # def aa(): # a=1 # def bb(): # nonlocal a #nonlocal:修改上一级的局部变量的值 # a=2 # print(a) # bb() # print(a) # aa() # print(a) # a=0 # def aa(): # a = 2 # def cc(): # def bb(): # nonlocal a #总结:只修改局部的变量值,从该层向外层找到第一个并修改 # a=1 # print(a) # bb() # print(a) # cc() # print(a) # aa() # print(a) |
先有了作用域,才有了名称空间
什么是全局作用域链:从调用的那层向外层一层一层的查找需要调用的内容,直到找到第一个,就会停止查找。
二 函数名
直接用print打印函数名,不加上括号,结果打印出来会是这个函数的内存地址和函数名。
函数名就是一个内存地址,相当于就是一个变量。
1
2
3
|
def wahaha(): print ( 123 ) print (wahaha) |
函数名可以赋值,也可以作为其他容器的元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# def func(): # print(‘alex_aa‘) # print(func) # a=func # print(a) # a() # l=[func] # print(l) # l[0]() # def alex(): # print(‘ab‘) # def func(aa): # print(aa) # aa() # func(alex) |
函数名还可以作为函数的返回值或者参数。
1
2
3
4
5
6
7
|
# def wahaha(): # name=‘alex‘ # def shuangwaiwai(): # print(name) # return shuangwaiwai # yousanru=wahaha() # yousanru() |
三, 三元表达式
三元表达式就是将一些简单的执行语句用更简单的代码写出来
比如:执行结构=判断语句成立的执行语句 if 判断语句 else 判断语句不成立的执行语句
1
2
3
4
|
a = 10 b = 9 c = a if a>b else b print (c) |
四 闭包函数
闭包函数一定要用到嵌套函数
什么是闭包函数:内部函数引用了外部函数的变量,这个内部函数就叫做闭包函数,闭包就是一种函数
1
2
3
4
5
6
|
def wahaha(): name = ‘fang‘ def shuangwaiwai(): #这个函数就是闭包函数 print (name) shuangwaiwai() wahaha() |
闭包函数的作用:装饰器是闭包函数的其中的一种应用。
在变量不会改变的情况下还可以不用重复的创建。
以上是关于闭包函数的主要内容,如果未能解决你的问题,请参考以下文章
Groovy闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
Groovy闭包 Closure ( 闭包作为函数参数 | 代码示例 )