使用函数中另一个函数的变量

时间:2018-02-08 19:18:49

标签: python python-3.x

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

void setup() {

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(8)) {
    Serial.println("initialization failed!");
   return;
  }
  Serial.println("initialization done.");

if(SD.mkdir("vdfa/3143#2123/fasfd")){ 
    Serial.println("Succesfully created directory");
    }
if(SD.mkdir("!")){
    Serial.println("Succesfully created directory1");
    }
    if(SD.mkdir("@")){
    Serial.println("Succesfully created directory2");
    }
    if(SD.mkdir("#")){
    Serial.println("Succesfully created directory3");
    }
    if(SD.mkdir("$")){
    Serial.println("Succesfully created directory4");
    }
    if(SD.mkdir("%")){
    Serial.println("Succesfully created directory5");
    }
    if(SD.mkdir("^")){
    Serial.println("Succesfully created directory6");
    }
    if(SD.mkdir("&")){
    Serial.println("Succesfully created directory7");
    }
    if(SD.mkdir("*")){
    Serial.println("Succesfully created directory8");
    }

  void loop(){

}

当我输入def test(): global a a = 0 a+=1 def test2(): a+=1 print (a) inp = input('a?') if inp == 'a': test() test2() 时。我希望代码输出2.但是,我收到此错误a。当我搜索这个时,我发现你需要使用UnboundLocalError: local variable 'a' referenced before assignment,但我已经在使用它了。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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