马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
《零基础入门学习Python》
——学习笔记
020函数:内嵌函数和闭包
一. 定义分析
1. global:全局变量引用时所需要的“声明”。
用法:在函数内的变量前加上global就会使该变量成为全局变量(如果有这个全局变量的话。)#举例子
>>>count = 5
>>>def MyFun():
count = 10
print(10)
>>>MyFun()
10
>>>print(count)
5
>>>def MyFun():
count = 10
print(10)
>>>MyFun()
10
>>>print(count)
10
2. 内嵌函数:在函数1内创建另一个函数2,并且建立的函数2只能在函数1内使用,不能在外部或其他函数内被调用。#举例子
>>>def fun1()
print(’fun1()正在被调用...’)
def fun2():
print(’fun2()正在被调用...’)
fun2()
>>>fun1()
fun1()正在被调用...
fun2()正在被调用...
3. 闭包 :引用了外部函数传递的参数的函数叫做闭包。#举例子
def func(name):
def inner_func(age):
print 'name:', name, 'age:', age
return inner_func
bb = func('the5fire')
bb(26) # >>> name: the5fire age: 26
这里面调用func产生的inner_func就是一个闭包。
一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。
4. nonlocal:类似于global,假设函数1内有一个内嵌函数2,那么在函数1中所设定的变量如果想传入到函数2中,那么此时这个函数1中的变量就相当于全局变量(但是它并不是),而在函数2中被引用的变量就可以看作为局部变量。那这个时候如果想要让函数1的变量在函数2中生效,那就需要对函数2中的引用的变量前添加nonlocal。#举例子
>>> def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
>>> Fun1()
25
二. 杂谈
1. nonlocal是在python3中创建的,原来是利用列表不存储在栈中的特性,把所赋的值变成列表来实现的。
2. 学到这里发现原来对return的使用和作用比较模糊,这里建议不熟悉的朋友去看下,否则很难看懂这一章。
三. 部分作业分析
1. 测试题2中最后那个inside位置不对看出来了,但是那个inside()的作用我有点不太明白,我试着把inside()替换成了return inside(),然后结果是和inside()一样的,是不是最后的inside()表示结束这个函数呢?
2. 请仔细看课后习题测试题4和测试题5的区别。
四. 知识掌握程度
心得:学到了内嵌函数和闭包的知识,加深了对自定义函数的理解。
难点:return的作用和内嵌函数与其外部函数的关系。
重点:对内嵌函数中变量所引用的值的理解和对作用域的理解。
|