鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 0

[技术交流] 《零基础入门学习Python》020函数:内嵌函数和闭包

[复制链接]
发表于 2017-7-6 00:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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的作用和内嵌函数与其外部函数的关系。

重点:对内嵌函数中变量所引用的值的理解和对作用域的理解。

评分

参与人数 2鱼币 +7 收起 理由
小甲鱼 + 3
康小泡 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 15:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表