OOP中闭包属性背后的逻辑是什么?

问题描述 投票:-1回答:2

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

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

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

python closures free-variable
2个回答
2
投票

这使您可以编写充当“功能工厂”的功能。因此,您可以使用一些参数调用外部函数,该参数将返回内部函数(请注意,至关重要的是,它不会调用内部函数)。

例如

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

这将返回一个接受参数的函数,然后将它们乘以传递给外部函数的'n':

例如

times_three = times_n(3)

times_three(4)

=>返回12

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


0
投票

简短的答案是闭包在面向对象的编程中没有地位。您会在python中看到很多,因为尽管该语言确实支持对象的概念,但它本身并不是面向对象的语言。可以肯定地说python支持许多编程范例,而闭包的思想来自该语言的功能方面。如果您有兴趣,可以在这里阅读更多内容(示例在JS中,但是想法是相同的):Alexander Kondov的“现代JavaScript中的功能编程范例:部分应用” https://link.medium.com/F492cDEhz6

© www.soinside.com 2019 - 2024. All rights reserved.