时间:2021-07-01 10:21:17 帮助过:68人阅读
def foo(): x = 1 def inner(): return x + 1 x = 3 print inner()
x=1
function g () { echo $x ; x=2 ; }
function f () { local x=3 ; g ; }
f #f中的g执行时打印出的x是3而不是1
echo $x #这时打印出的x是1
你以为Python是let foo () =
let x = 1 in
let inner () = x + 1 in
let x = 3 in
print (inner ())
python的闭包里的自由变量是按引用传递的,而不是按值传递,所以会有这个结果。def foo():
def inner():
return x + 1
x = 1
print inner() # output 2
x = 2
print inner() # output 3
这分明就是lexical scoping嘛,譬如说等价的C#代码
void Foo()
{
int x=1;
Func<int> inner = ()=>x+1;
x=3;
Console.WriteLine(inner());
}
把楼主的代码改写成 lua 可以看看 Python 和 Lua 在处理上的不同:function foo()
function inner()
return x + 1
end
local x = 3
print(inner())
end
foo()
题主所说的 现代化的编程语言指的是什么? js经过这么多代的更新迭代,现在也是这样~(function foo() {
function inner() {
return x+1;
}
x = 3;
console.log(inner());
})();
def foo():
x = 1
def inner():
return x + 1
x = 3
print inner()
foo()
#
输出4
我觉得完全没有背离啊。。