python--内部函数(十四)

举报
brucexiaogui 发表于 2021/12/30 01:53:28 2021/12/30
【摘要】 python--内部函数(十四)   # 内嵌函数和闭包 # 将局部变量改为全局变量count = 5 #定义全局变量countdef myfun(): count = 10 #定义局部变量count print(count)myfun() #调用myfun方法,打印的结果是count=10 说明当全局...

python--内部函数(十四)

 


  
  1. # 内嵌函数和闭包
  2. # 将局部变量改为全局变量
  3. count = 5 #定义全局变量count
  4. def myfun():
  5. count = 10 #定义局部变量count
  6. print(count)
  7. myfun() #调用myfun方法,打印的结果是count=10 说明当全局变量和局部变量重名时,先在局部查找这个指定的变量,如果没有在去全局查找。
  8. # global 全局关键字
  9. count = 5 #定义全局变量count
  10. def myfun():
  11. global count #用global修饰局部变量count,使其变为全局变量
  12. print(count)
  13. myfun() #调用myfun方法,打印的结果是5,说明global count修饰局部变量变为全局变量成功。
  14. # 内嵌函数==内部函数
  15. def fun1(): #定义外层的方法
  16. print('fun1()方法正在被调用')
  17. def fun2(): #定义内部方法
  18. print('fun2()方法正在被调用。。。')
  19. fun2() #在外层方法中调用内部方法
  20. fun1() #调用fun1()方法同时由fun1()调用fun2()方法 调用fun1()方法结果:fun1()方法正在被调用 fun2()方法正在被调用。。。
  21. '''
  22. 闭包 函数式编程lisp
  23. 什么是闭包:1、存在内嵌关系,及外部函数内嵌了一个函数。2、外部函数定义的变量被内部函数引用。满足这两个条件就是是内部函数是外部函数的闭包
  24. '''
  25. def fun1(x): #定义外层的方法
  26. print('fun1()方法正在被调用')
  27. def fun2(y): #定义内部方法,调用外部函数的变量
  28. print('fun2()方法正在被调用。。。')
  29. return x * y
  30. return fun2 #返回fun2的值
  31. i = fun1(5)(7) #调用fun1同时给fun1和fun2传递参数
  32. print(i) #打印fun1和fun2的值
  33. # 闭包中如果在内部函数中修改外部函数变量,会引发错误。
  34. # 原因是内部方法的局部变量名称和外部方法的变量名称一样,且作用域范围不一样导致的。
  35. # 解决的方法就是在内部方法中将这个重名的变量申明为nonlocal
  36. def fun1():
  37. x = 5
  38. def fun2():
  39. nonlocal x #将x变量设置为nonlocal
  40. x +=x
  41. return x
  42. return fun2()
  43. i = fun1()
  44. print(i) #结果为10

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/80336010

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。