Javascript 코드에서 어휘 폐쇄와 관련된 문제를 조사하는 동안 Python 에서이 문제가 발생했습니다.
flist = []
for i in xrange(3):
def func(x): return x * i
flist.append(func)
for f in flist:
print f(2)
이 예제는주의해서 피한다 lambda
. "4 4 4"를 인쇄하는데 이는 놀랍습니다. "0 2 4"를 기대합니다.
이 동등한 Perl 코드가 올바르게 수행합니다.
my @flist = ();
foreach my $i (0 .. 2)
{
push(@flist, sub {$i * $_[0]});
}
foreach my $f (@flist)
{
print $f->(2), "\n";
}
"0 2 4"가 인쇄됩니다.
차이점을 설명해 주시겠습니까?
최신 정보:
문제는 되지 않습니다 와 함께 i
글로벌 인. 동일한 동작이 표시됩니다.
flist = []
def outer():
for i in xrange(3):
def inner(x): return x * i
flist.append(inner)
outer()
#~ print i # commented because it causes an error
for f in flist:
print f(2)
주석 처리 된 행이 표시하는 것처럼 i
해당 시점에서 알 수 없습니다. 여전히 "4 4 4"를 인쇄합니다.