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

  • A+
所属分类:Python学习

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

 

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: