Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OOPs中闭包属性背后的逻辑是什么?_Python_Closures_Free Variable - Fatal编程技术网

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

Python OOPs中闭包属性背后的逻辑是什么?,python,closures,free-variable,Python,Closures,Free Variable,我对面向对象编程语言中的闭包概念表示怀疑。因此,根据定义,闭包是一个内部函数的概念,可以访问自由变量(在外部函数中创建的变量) 我想知道,为什么一个内部函数有这个属性?面向对象编程语言的这种功能背后的逻辑是什么 另外,我正在学习Python中的OOPs。。。 如果有人有任何想法,请帮助:) 谢谢这允许您编写类似于“函数工厂”的函数。因此,您使用一些参数调用外部函数,它返回内部函数(请注意,至关重要的是,它不调用内部函数) e、 g 这将返回一个函数,该函数将接受参数,并将它们乘以传递给外部函数的

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

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

另外,我正在学习Python中的OOPs。。。 如果有人有任何想法,请帮助:)
谢谢

这允许您编写类似于“函数工厂”的函数。因此,您使用一些参数调用外部函数,它返回内部函数(请注意,至关重要的是,它不调用内部函数)

e、 g

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

例如

=>返回12


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

简单的回答是闭包在面向对象编程中没有位置。您在python中经常看到它,因为尽管该语言确实支持对象的概念,但它本身并不是一种面向对象的语言。 更确切地说,python支持许多编程范例,闭包的概念来自语言的功能方面。 如果您感兴趣,可以在这里阅读更多内容(示例使用JS,但想法相同):
Alexander Kondov的“现代JavaScript中的函数式编程范例:部分应用程序”基本上是因为Python语言的设计者决定这样做的。它与“OOP”没有特别的关系。Python恰好支持OOP和闭包。行为(如果这些概念得到支持)因语言而异。因此,这些问题在联想中走错了方向。。
def times_n(n):
    def func(x):
        return x*n
    return func 
times_three = times_n(3)

times_three(4)