Python 在函数中使用来自另一个函数的变量

Python 在函数中使用来自另一个函数的变量,python,python-3.x,Python,Python 3.x,我试图搜索这个,但我不太明白。我遇到了这个错误,所以我形成了一个简单的例子 def test(): global a a = 0 a+=1 def test2(): a+=1 print (a) inp = input('a?') if inp == 'a': test() test2() 当我输入a时。我希望代码输出2。但是,我得到了这个错误UnboundLocalError:赋值之前引用的局部变量“a”。当我四处搜索时,我发现您

我试图搜索这个,但我不太明白。我遇到了这个错误,所以我形成了一个简单的例子

def test():
    global a
    a = 0
    a+=1

def test2():
    a+=1
    print (a)


inp = input('a?')
if inp == 'a':
    test()
    test2()
当我输入
a
时。我希望代码输出2。但是,我得到了这个错误
UnboundLocalError:赋值之前引用的局部变量“a”
。当我四处搜索时,我发现您需要使用
global
,但我已经在使用它了

所以我不明白。有人能简单地解释一下我做错了什么吗?
谢谢。

A
global
声明仅适用于该函数。因此
test()
中的声明意味着在该函数中使用变量
a
将引用全局变量。它对其他函数没有任何影响,因此如果
test2
也希望访问全局变量,那么您也需要相同的声明

def test2():
    global a
    a += 1
    print(a)

全局
声明仅适用于该函数。因此
test()
中的声明意味着在该函数中使用变量
a
将引用全局变量。它对其他函数没有任何影响,因此如果
test2
也希望访问全局变量,那么您也需要相同的声明

def test2():
    global a
    a += 1
    print(a)
1) 您可以返回修改后的值,如下所示:

def test():
    a = 0
    a+=1
    return a

def test2(a):
    a+=1
    print (a)


inp = input('a?')
if inp == 'a':
    a = test()
    test2(a)
2) 或者您可以使用一个类:

class TestClass:

    a = 0

    def test(self):
        self.a = 0
        self.a+=1

    def test2(self):
        self.a+=1
        print (self.a)
选择2的使用:

>>> example = TestClass()
>>> example.test()
>>> example.test2()
2
1) 您可以返回修改后的值,如下所示:

def test():
    a = 0
    a+=1
    return a

def test2(a):
    a+=1
    print (a)


inp = input('a?')
if inp == 'a':
    a = test()
    test2(a)
2) 或者您可以使用一个类:

class TestClass:

    a = 0

    def test(self):
        self.a = 0
        self.a+=1

    def test2(self):
        self.a+=1
        print (self.a)
选择2的使用:

>>> example = TestClass()
>>> example.test()
>>> example.test2()
2

您还需要在
test2
中使用
global a
输入的要点是什么?它与这个问题有什么关系?更好的是:尽量避免使用
global
名称,它们破坏了代码的模块性。不,它只是说在这个函数中,
a
应该引用全局变量。你不能通过编写
test()
test2()来演示它吗
没有
if
?您还需要
test2
中的
全局a
。输入
if
有什么意义?它与这个问题有什么关系?更好的是:尽量避免使用
global
名称,它们破坏了代码的模块性。不,它只是说在这个函数中,
a
应该引用全局变量。你不能通过编写
test()
test2()来演示它吗
如果没有
if
?我想如果您也解释了原始代码不起作用的原因,那么这将是更好的答案(不使用
全局
几乎总是更好)但它并没有解决在原始代码中实际不起作用的问题。我想如果你也解释了为什么原始代码不起作用,那么这将是更好的答案(不使用
global
几乎总是更好),但它没有解决在原始代码中实际不起作用的问题。