我对面向对象编程语言中的闭包概念有疑问。所以根据定义,闭包是一个内部函数可以访问自由变量(在外部函数中创建的变量)的概念。
我想知道,为什么内部函数有这个属性?面向对象编程语言的这种功能背后的逻辑是什么?
PS我正在学习Python中的OOP ...如果有人有任何想法请帮助:)谢谢
我对面向对象编程语言中的闭包概念有疑问。所以根据定义,闭包是一个内部函数可以访问自由变量(在外部函数中创建的变量)的概念。
我想知道,为什么内部函数有这个属性?面向对象编程语言的这种功能背后的逻辑是什么?
PS我正在学习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