Python第二十课:函数:内嵌函数和闭包

李金龙
李金龙
管理员
526
文章
0
粉丝
Python学习Python第二十课:函数:内嵌函数和闭包已关闭评论3,443字数 384阅读模式

global 全局变量

  1. num = 5
  2. def Li():
  3.     num =10
  4.     print(num)
  5. Li()   #10
  6. print(num)  #5
  1. num = 5
  2. def Li():
  3.     global num #申明num为全局变量
  4.     num =10
  5.     print(num)
  6. Li()  #10
  7. print(num)  #10

内嵌函数(内部函数)

  1. def num1():
  2.     print('我是mum1')
  3.     def num2():
  4.         print('我是num2')
  5.         def num3():
  6.             print('我是num3')
  7.             def num4():
  8.                 print('我是num4')
  9.             num4()
  10.         num3()
  11.     num2()
  12. print(num1())
  13. # 我是mum1
  14. # 我是num2
  15. # 我是num3
  16. # 我是num4
  17. # None

闭包(closure)

  1. def lee1(num):
  2.     def lee2(num1):
  3.         return num *num1
  4.     return lee2
  5. i = lee(3)
  6. i(5)
  7. 15
  8. #另一种
  9. lee1(3)(5)
  10. 15
  1. def Fun1():
  2.     x =5 #非全局变量的外部变量
  3.     def Fun2():
  4.         x*=x
  5.         return x
  6.     return Fun2()
  7. Fun1()

上述函数报错:UnboundLocalError: local variable 'x' referenced before assignment

注释:局部变量X,不能在没有赋值之前被引用

python2.x系列可以用

  1. def Fun1():
  2.     x =[5] #非全局变量的外部变量
  3.     def Fun2():
  4.         x[0]*=x[0]
  5.         return x[0]
  6.     return Fun2()

nonlocal

Python3.x系列可以使用nonlocal

  1. def Fun1():
  2.     x =5 #非全局变量的外部变量
  3.     def Fun2():
  4.         nonlocal x
  5.         x*=x
  6.         return x
  7.     return Fun2()
  8. print(Fun1())

单词扩展:

  • global : 总体的
  • nonlocal: 非局部的

扩展阅读:


版权注释:

Python课程来源于鱼C论坛:http://bbs.fishc.com/forum-243-1.html 版块,课程内容为免费内容,如果你喜欢该课程,建议购买VIP账号支持小甲鱼,官方网店:https://fishc.taobao.com/)。

本内容为在李金龙在学习课程中做的日记记录,方便自己以后查找相关信息,另一方面也希望自己写下的东西可以帮助到别人。

课程内容:http://blog.fishc.com/3112.html

 

 
李金龙
  • 本文由 李金龙 发表于2017年4月21日 10:54:09
  • 转载请务必保留本文链接:https://www.lijinlong.cc/python/pyxx/1823.html
Python学习

Python3第二十八课:文件的使用

Python3文件处理: 其实一直想搞一个小工具来处理信息预埋后,产品的数据返回,比方说我发了100个帖子,他们有多少被删除了,有多少的浏览量,有多少被搜索引擎收录了,有多少用户回复,回复的重点是什么...