鱼C论坛

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

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

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

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

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

x
《零基础入门学习Python》
——学习笔记
020函数:内嵌函数和闭包

一.        定义分析

1.        global:全局变量引用时所需要的“声明”。

用法:在函数内的变量前加上global就会使该变量成为全局变量(如果有这个全局变量的话。)
  1. #举例子
  2. >>>count = 5
  3. >>>def MyFun():
  4.                   count = 10
  5.                   print(10)
  6. >>>MyFun()
  7. 10
  8. >>>print(count)
  9. 5
  10. >>>def MyFun():
  11.                   count = 10
  12.                   print(10)
  13. >>>MyFun()
  14. 10
  15. >>>print(count)
  16. 10
复制代码
2.        内嵌函数:在函数1内创建另一个函数2,并且建立的函数2只能在函数1内使用,不能在外部或其他函数内被调用。
  1. #举例子
  2. >>>def fun1()
  3.                   print(’fun1()正在被调用...’)
  4.                   def fun2():
  5.                                                 print(’fun2()正在被调用...’)
  6.                   fun2()
  7. >>>fun1()
  8. fun1()正在被调用...
  9. fun2()正在被调用...
复制代码
3.        闭包 :引用了外部函数传递的参数的函数叫做闭包。
  1. #举例子
  2. def func(name):
  3.     def inner_func(age):
  4.         print 'name:', name, 'age:', age
  5.     return inner_func
  6. bb = func('the5fire')
  7. 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。
  1. #举例子
  2. >>> def Fun1():
  3.         x = 5
  4.         def Fun2():
  5.                 nonlocal x
  6.                 x *= x
  7.                 return x
  8.         return Fun2()

  9. >>> Fun1()
  10. 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-4-20 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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