• 闭包浅谈


    如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10263546.html

    欢迎关注小婷儿的博客:

    有问题请在博客下留言或加作者微信tinghai87605025  QQ 87605025

    python QQ交流群:py_data 483766429

    闭包

    一、概念

    内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure即,闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定要有参数

    1 def 外部函数(参数):
    2 
    3     def 内部函数():
    4 
    5         pass
    6 
    7 return 内部函数

    二、闭包与正常函数的区别:

    l   闭包格式是两个函数的嵌套;

    l   闭包外部函数的参数可以在内存中保持;

    l   闭包函数就如同一个“类”,只有在该闭包函数里的方法才可以使用其局部变量,闭包函数之外的方法是不能读取其局部变量的。这就实现了面向对象的封装性,更安全更可靠,即闭包里面的数据是独有的数据,与外界无影响;

    l   函数:函数中,需要使用的全局变量,在一定程度上是受到限制的,因为全局变量不仅仅是一个函数使用,其他的函数也可能会使用到,一旦修改会影响到其他函数使用全局变量,所以全局变量不能随便修改从而在函数的使用中受到一定局限性。

     

    三、练习

    例一、求和

    1 def func_out(*args):   #定义内内部函数
    2    def func_in():   #使用外部函数的args变量
    3       sumV = sum(args)
    4       return sumV   #返回内部函数
    5    return func_in
    6 
    7 S = func_out(1, 2, 3, 2)
    8 print(S())   #真正调用的是func_in函数

    结果:

      8

     

    例二、判断成绩是否合格

     1 def pass_out(scoreLine):
     2    def true_score(score):
     3       if score >= scoreLine:
     4          print('合格')
     5       else:
     6          print('不合格')
     7    return true_score
     8 total_score_100 = pass_out(60)
     9 total_score_150 = pass_out(90)
    10 total_score_100(90)
    11 total_score_150(60)

    结果:  

      合格
      不合格

    例三、申明变量

     1 def func_outer(numb):
     2    def func_inner():
     3 # nonlocal是闭包内部变量的声明:声明变量不是局部变量,这样下方的代码可以对外部函数传入的变量进行修改
     4       nonlocal numb
     5       numb += 1
     6       return numb
     7 
     8    return func_inner
     9 
    10 
    11 ret = func_outer(66)  # 得到内部函数inner的指向
    12 print(ret())  # 调用inner函数,并打印inner函数的返回值 结果为67

    结果:

      67

     

    欢迎关注小婷儿的博客:

    博客园:http://www.cnblogs.com/xxtalhr/

    csdnhttps://blog.csdn.net/u010986753

     

    有问题请在博客下留言或加作者微信tinghai87605025  QQ 87605025

    python QQ交流群:py_data 483766429

     

    OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

    OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

     

    小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

    重要的事多做几遍。。。。。。

     

    wps75BC.tmp 

  • 相关阅读:
    linux查看硬件信息及驱动设备相关整理
    qt 画图相关
    glaux.h vs2008
    技巧:Vimdiff 使用
    Linux下显示硬件信息(二)lshw
    Linux下硬件信息查看(一)dmidecode
    qt delegate
    RFKill 【解决opensuse11.4 无法开启无线网的问题】
    板子上运行提示 找不到qml插件
    CRISPDM
  • 原文地址:https://www.cnblogs.com/pythonbao/p/10263546.html
Copyright © 2020-2023  润新知