为什么这个非常简单的功能不起作用?

时间:2019-01-23 19:16:50

标签: python python-3.x

为什么这个非常简单的功能不起作用?我收到NameError:名称'x'未定义

def myfunc2():
    x=5
    return x

myfunc2()
print(x)

2 个答案:

答案 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

希望这会有所帮助。