menu Secto白帽博客-专注于技术研究
Python 内嵌函数和闭包
56 浏览 | 2020-07-24 | 分类:程序设计 | 标签:Python

前言

在前面的章节中我们已经学会了如何自定义函数以及如何使用lambda表达式,在本篇文章中我们将学习什么是内嵌函数和闭包函数的定义.

Python内嵌函数

说起内嵌函数,还是比较好理解的,即--a函数里能嵌套b函数.
简单来说,类似循环嵌套和逻辑嵌套

比如下面这个实例:

def MyFirstFunction():
    print ("这是第一层FC函数")
    def MySecondFuncion():
        print ("这是第二层FC()函数")
    MySecondFunction()

在上面这个实例里,我们可以看到在FirstFunction里嵌套了第二层函数SecondFunction.
最难理解的是最后一行MySecondFunction()
其实这一行很好理解,就是在第一层函数里调用第二层函数,否则第二层函数无法调用.

Python闭包函数

Python里闭包函数这个东西口头说很难理解,我给出一段维基上的解释大家感受一下:

在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

怎么样?是不是听不懂??
别着急,马上就会有一个通俗的解释了:
下面给大家演示一个实例:

def a():
    x = [5]
    def b():
        x[0] *= x[0]
        #将列表中的第一位与第一位相乘
        #即x乘以x
        return x[0]
    return b()

这些代码的运行结果呢,是下面这样的:

>>>a()
25
>>>

通过这个实例可以看到,真正执行的是第二层b()中的语句,在用一层的a()来return返回b()的值
可能有好多小伙伴不理解,为什么要用x[5]呢?
这个问题其实很好回答,如果直接使用x值,会导致报错,因为第一层的x是局部变量中的全局变量对于第二层y()来说是无法引用的,这个问题在python3.x中目前没有很好的解决办法,只能把这个x值放到容器里面(容器就是指像列表这样的随便存放数据类型的东西)再在第二层里面使用.

End.

本人QQ:1377495028
欢迎前来交流讨论

By:Red blade.
Time:2020/7/24

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!