美文网首页Python
Python中的闭包

Python中的闭包

作者: vapa | 来源:发表于2019-07-16 21:46 被阅读5次

闭包:高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
先来看这样一个函数:

# a=1
def foo_x(x):
    #  b=2
    def foo_y(y):
          # c=3
          return x*y
    return foo_y

在这个代码块中,如果执行foo_x,那么顺序流应该是先创建foo_x,接着定义foo_y,而foo_y的功能在意返回xy的值,即调用foo_y得到 xy的值,此时,再一次返回foo_y,也就是返回值x*y.

foo_y看做是一个内部功能,返回值,而返回foo_y就是返回x*y.

注意

a属于全局变量,b是一个定义在函数中的局部变量,属于局部作用域,在foo_x函数的外部并不能访问到它;但对于foo_x函数内部的foo_y函数来说,变量b属于嵌套作用域,在foo_y函数中我们是可以访问到它的。foo_y函数中的变量c属于局部作用域,在bar函数之外是无法访问的。事实上,Python查找一个变量时会按照“局部作用域”“嵌套作用域”“全局作用域”“内置作用域”的顺序进行搜索.

global和nonlocal的区别

第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,即嵌套作用域,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误(见第一)。

相关文章

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • Python 中的闭包

    Python 中的闭包:+ http://python.jobbole.com/82296/

  • Python闭包与ObjC的block的区别与联系

    首先明确一下Python闭包和ObjC中block的定义在python中闭包是这么定义的——内层函数引用了外层函数...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • 彻底理解JS闭包

    闭包并不是JS所独有的,在计算机科学中其是一个普遍的概念,在Python中也有闭包的概念,但闭包在Python应用...

  • Python装饰器(Decorator)完全指南-基础篇

    Decorator基本指南 前提知识 Python中的闭包(closure) 所谓闭包,指的是附带数据的函数对象。...

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • python中闭包,闭包的实质

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助...

  • Python装饰器与闭包!

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。 变量作用域规则 首先,在函数...

网友评论

    本文标题:Python中的闭包

    本文链接:https://www.haomeiwen.com/subject/ywdxlctx.html