OOP中闭包属性背后的逻辑是什么?[已结束]

What is the logic behind closure property in OOPs? [closed]

提问人:Flash 提问时间:5/18/2020 更新时间:5/18/2020 访问量:190

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

3年前关闭。

我对面向对象编程语言中的闭包概念有疑问。因此,根据定义,闭包是内部函数可以访问自由变量(在外部函数中创建的变量)的概念。

我想知道,为什么内部函数有这个属性?面向对象编程语言的这种功能背后的逻辑是什么?

P.S. 我正在学习 Python 中的 OOP...... 如果有人有任何想法,请帮助:) 谢谢

Python 闭包 free-variable

评论

1赞 mkrieger1 5/18/2020
基本上原因是 Python 语言的设计者决定这样做。
0赞 user2864740 5/18/2020
它与“OOP”没有特别的关系。Python 恰好支持 OOP 闭包。行为(如果支持此类概念)因语言而异。因此,这些问题与联想有关。

答:

2赞 SimonR 5/18/2020 #1

这允许您编写行为为“函数工厂”的函数。因此,您使用某个参数调用外部函数,该参数返回内部函数(请注意,至关重要的是,它不会调用内部函数)。

例如:

def times_n(n):
    def func(x):
        return x*n
    return func 

这将返回一个函数,该函数将接受参数,并将它们乘以您传递给外部函数的“n”:

例如

times_three = times_n(3)

times_three(4)

=> 返回 12

所有这些都是可能的,因为 python 中的函数是第一类对象:您可以传递它们,将它们分配给变量,在这种情况下,从函数返回它们。

0赞 Ori Cohen 5/18/2020 #2

简短的回答是,闭包在面向对象编程中没有立足之地。你在 python 中经常看到它,因为虽然该语言确实支持对象的概念,但它本身并不是一种面向对象的语言。 更真实的说法是,python 支持许多编程范式,而闭包的思想来自语言的功能方面。 如果你有兴趣,你可以在这里阅读更多内容(示例在 JS 中,但想法是一样的): “现代 JavaScript 中的函数式编程范式:部分应用”,作者:Alexander Kondov https://link.medium.com/F492cDEhz6