Closures in Python

作者: gomibako | 来源:发表于2017-10-13 22:42 被阅读1次

December 2006

From the newsgroup:

Q. I don’t understand why while a nested function perfectly matches the definition of closure, it is not closure simply because it is not used by external world.

Like so many other computing terms, the word “closure” is used in different ways by different people.

Strictly speaking, a closure is simply a function with free variables, where the bindings for all such variables are known in advance. Some early languages didn’t have “closed” functions; the bindings for free variables were left open, and was determined at runtime. And languages that had both “open” and “closed” functions needed some way to distinguish between the two, so people started referring to the latter as “closures”.

But in Python, as well as in most other modern languages, all functions are “closed” — i.e. there are no “open” free variables — so the use of the term has morphed from “a function for which all free variables have a known binding” to “a function that can refer to environments that are no longer active” (such as the local namespace of an outer function, even after that function has returned).

def outer_function():
    outer_function_local_var = 'out_value'
    def function():
        print(outer_function_local_var) # 'out_value'

outer_function()() #print 'out_value'

And since that is somewhat difficult to implement, and programmers don’t like to hide things that are hard to implement, people still like to use the term to distinguish between closed functions of kind 1 and closed functions of kind 2. As in this [newsgroup] thread, they sometimes argue that when you’re using a closed function of kind 2 in a specific way, it’s not quite as much of a closure as when you use it in another way. Heck, some people even argue that languages that don’t support closed functions of kind 3 (a kind that Python currently doesn’t support) don’t really have closures at all.

But as a language user, you can actually forget about all this — all you need to know is that in Python, all functions are closed, and free variables bind to variable names in lexically nested outer scopes.

Reference: http://effbot.org/zone/closure.htm

相关文章

  • Closures in Python

    December 2006 From the newsgroup: Q. I don’t understand w...

  • Python 闭包变量绑定问题

    延时绑定 原文 Python’s closures are late binding. This means th...

  • Python : 闭包Closures

    闭包 Closures 是由另外一个函数返回的函数.使用闭包去除重复代码.

  • Swift工具包

    Closures[https://github.com/vhesener/Closures]为UIKit和Foun...

  • python 闭包

    转载自https://serholiu.com/python-closures了解闭包前,先了解一下变量作用域看个...

  • closures

    closures 是js的特色,它的本质即一个函数+这个函数生成的上下文环境。我们以下面的代码为例来讲解closu...

  • Closures

    广义上函数和内嵌函数都属于特殊的闭包 闭包的三种格式1-全局函数是有名字,但捕获值的闭包2-内嵌函数是有名字,可以...

  • closures

  • closures

    一个闭包例子,侵删

  • Closures

    Closure Expressions The Sorted Method the above example s...

网友评论

    本文标题:Closures in Python

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