def maker(n):
def action(x):
return x ** n
return action
f = maker(2)
print(f)
print(f(3))
print(f(4))
g = maker(3)
print(g(3))
print(f(3)) # still remembers 2
Run Code Online (Sandbox Code Playgroud)
为什么嵌套函数会记住第一个值,2即使maker()已经返回并退出时action()被调用?
我看过关闭的样本 - 什么是'关闭'?
任何人都可以提供何时使用闭包的简单示例?
具体来说,闭包有意义吗?
让我们假设语言没有关闭支持,如何才能实现类似的东西呢?
不要冒犯任何人,请用c#,python,javascript,ruby等语言发布代码示例.
很抱歉,我还不懂函数式语言.
我对闭包的理解是它们本质上是一个函数,它使用一个你认为超出范围的变量.我想这是我前几天看到的一个例子:
function closureMaker(somearg)
{
var local_value = 7;
function funcToReturn(arg1, arg2)
{
return local_value + somearg + arg1 + arg2;
}
return funcToReturn;
}
var myClosure = closureMaker(6); //make the closure
myClosure(2, 3); //using it
Run Code Online (Sandbox Code Playgroud)
现在闭包有local_value甚至是原始的arg,somearg.但我不明白为什么这些都有帮助.使用'free'变量local_value有什么意义,甚至更不为我所知,为什么你会在闭包函数中使用closureMaking函数的参数?
我对如何在javascript中使用它更感兴趣,这是否用于AJAX请求和对象?
我得到了什么.我需要为什么.
根据python教程,函数在查找全局函数之前在封闭函数的符号表中查找变量名:
函数的执行引入了用于函数局部变量的新符号表.更确切地说,函数中的所有变量赋值都将值存储在本地符号表中; 而变量引用首先在本地符号表中查找,然后在封闭函数的本地符号表中查找,然后在全局符号表中查找,最后在内置名称表中查找.因此,全局变量不能直接在函数内赋值(除非在全局语句中命名),尽管可以引用它们.
"封闭功能"究竟是什么意思,何时使用?
我看到以下代码在调用时打印10
def parent_function():
y=10
def child_function():
print y
child_function()
Run Code Online (Sandbox Code Playgroud)
但是,单独调用child_function()会产生错误.是否经常使用封闭功能?