python闭包closure

作者: 王吉吉real | 来源:发表于2017-10-19 23:15 被阅读0次

一、概念

闭包(closure)是一种引用了非局部变量(non-local variable)的内嵌函数(nested function)。

名词解释:

内嵌函数(nested function):定义在其他函数内部的函数叫内嵌函数。内嵌函数可以访问所定义在的外部函数内的变量。

非局部变量:非局部变量(non-local variable)在python中默认只读,如果想要修改它,就需要声明为nonlocal变量(使用nonlocal关键词,python 3.X以后添加的)。

来定义一个闭包:

```

def print_msg(msg):

#this is the outer enclosing function

def printer():

#this is the nested function

print(msg)

return printer

another_print = print_msg("hello")

another_print()

```

上面这种关联着数据的代码块就是python中的闭包了。而且变量的取值会被保留,即使闭包超出了该变量的作用范围或者外部的函数被删除。

二、条件

满足什么条件才能被称为闭包呢?

像上面的例子一样,满足了以下3个条件:

1、需要有一个内嵌函数(定义在函数中的函数);

2、内嵌函数需要引用定义在外部函数中变量;

3、内嵌函数需要被返回;

三、场景

最常使用闭包的场景可以归纳为以下几种:

1、在一个类中只有非常少的方法(通常是只有一个);

2、避免使用全局变量的时候;

3、装饰器模式中;

4、提供一致的函数签名;

相关文章

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

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

  • 关于rust中的闭包(一)

    闭包 在计算机中,闭包 Closure, 又称词法闭包 Lexical Closure 或函数闭包 functio...

  • 关于闭包

    闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closu...

  • 理解闭包

    闭包 何为闭包 闭包(Closure)是词法闭包(Lexical Closure)的缩写 高级程序设计中写有权访问...

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • python之闭包与装饰器

    1 闭包 维基百科给出的解析:闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭...

  • python 闭包closure

    当内部函数对外部函数的变量(非全局变量)进行了引用,则内部函数被称之为闭包 举个栗子: 调用: c = outte...

  • python闭包closure

    一、概念 闭包(closure)是一种引用了非局部变量(non-local variable)的内嵌函数(nest...

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

  • [Code] 优雅地使用python闭包

    在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(funct...

网友评论

    本文标题:python闭包closure

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