zoukankan      html  css  js  c++  java
  • python语法32[闭包]


    一 闭包

    来自wiki:
    闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 

    在一些语言中,在函数中定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。

    闭包的用途:
    因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。
    多个函数可以使用一个相同的环境,这使得它们可以通过改变那个环境相互交流。 

    来自baidu百科:

    闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。

    二 python中闭包 

    实例:

    def make_counter():
        count = 0
        def counter():
            nonlocal count
            count += 1
            return count
        return counter
        
    def make_counter_test():
      mc = make_counter()
      print(mc())
      print(mc())
      print(mc())

    三 lamada

    实例:

    def f(x):
        return x**2

    print f(4)


    g = lambda x : x**2
    print g(4)

    Python中的lambda真的没有用武之地吗?其实不是的,至少我能想到的点,主要有:
    1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
    2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

    3. 使用lambda在某些时候让代码更容易理解。 

    参考: 

    完! 

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/itech/p/2308818.html
Copyright © 2011-2022 走看看