我对面向对象编程语言中的闭包概念感到怀疑。因此,按照定义,闭包是内部函数可以访问自由变量(在外部函数中创建的变量)的概念。
我想知道,为什么内部函数具有此属性?面向对象编程语言的功能背后的逻辑是什么?
P.S。我正在用Python学习OOP ...如果有人有任何想法,请帮助:)谢谢
这使您可以编写充当“功能工厂”的功能。因此,您可以使用一些参数调用外部函数,该参数将返回内部函数(请注意,至关重要的是,它不会调用内部函数)。
例如
def times_n(n):
def func(x):
return x*n
return func
这将返回一个接受参数的函数,然后将它们乘以传递给外部函数的'n':
例如
times_three = times_n(3)
times_three(4)
=>返回12
所有这些都是可能的,因为python中的函数是一流的对象:您可以将它们传递给它们,将它们分配给变量,在这种情况下,可以从函数中将它们返回。
简短的答案是闭包在面向对象的编程中没有地位。您会在python中看到很多,因为尽管该语言确实支持对象的概念,但它本身并不是面向对象的语言。可以肯定地说python支持许多编程范例,而闭包的思想来自该语言的功能方面。如果您有兴趣,可以在这里阅读更多内容(示例在JS中,但是想法是相同的):Alexander Kondov的“现代JavaScript中的功能编程范例:部分应用” https://link.medium.com/F492cDEhz6