为什么这个非常简单的功能不起作用?我收到NameError:名称'x'未定义
def myfunc2():
x=5
return x
myfunc2()
print(x)
答案 0 :(得分:1)
您已经在x
内声明并定义了myfunc2
,但没有在x
之外定义,因此myfunc2
不在x
之外定义。
如果您想访问myfunc2
之外的a = myfunc2()
print(a) # 5
的值,则可以执行以下操作:
use warnings;
use strict;
use feature 'say';
use Data::Dump qw(dd);
use List::MoreUtils qw(uniq);
my @data = (
[ qw(abc def ghi xyz) ],
[ qw(def jkl mno uvw xyz) ],
[ qw(abc uvw xyz) ]
);
my @all = uniq sort { $a cmp $b } map { @$_ } @data; # reference
# Changes @data in place. Use on deep copy to preserve the original
for my $ary (@data) {
my $cmp_at = 0;
my @res;
for my $i (0..$#all) {
if ($ary->[$cmp_at] eq $all[$i]) {
push @res, $ary->[$cmp_at];
++$cmp_at;
}
else {
push @res, undef;
}
}
$ary = \@res; # overwrite arrayref in @data
}
dd \@data;
我建议阅读variable scope in Python。
答案 1 :(得分:-4)
myfunc2中的x被声明为本地变量。为了使该脚本起作用,您可以将x声明为global:
def myfunc2():
global x
x = 5
return x
myfunc2()
print(x)
>>>5
希望这会有所帮助。