如何修复``分配前引用的局部变量'结果'''

时间:2019-01-27 03:11:32

标签: python python-3.5

      8     if n != 0:
      9         y = n%10 #figure out the least number like 12345 is 5
---> 10         result.append('y')
     11         get_digits(n//10)#like 12345 becomes 1234
     12 

赋值之前引用的局部变量“结果”

我该如何解决?感谢您的帮助

如果我这样做,它将起作用:

result = []
def get_digits(n):
        if n>0:
               result.insert(0,n%10)
               get_digits(n//10)

get_digits(12345)
print(rsult)

这是我的最后一个代码,有一个错误,但是我无法解决

## input 12345 ,output[1,2,3,4,5]

result = []#define a empty list

def get_digits(n):    
    if n == 0:
        result = list(reversed(result))#reverse the list,if not output[5,4,3,2,1]
        return result
    if n != 0:
        y = n%10#figure out the least number like 12345 is 5
        result.append('y')
        get_digits(n//10)#like 12345 becomes 1234

print(get_digits(12345))    

[1,2,3,4,5]

3 个答案:

答案 0 :(得分:1)

告诉python public void ConfigureServices(IServiceCollection services) { services.AddHangfire(configuration => { configuration.UseStorage( new MySqlStorage( "server=127.0.0.1;uid=root;pwd=root;database={0};Allow User Variables=True", new MySqlStorageOptions { TablesPrefix = "Hangfire" } ) ); }; } 是一个result变量:

global

答案 1 :(得分:0)

问题是result是在函数的全局范围内定义的,因此您的函数无法分配给变量。您可以通过添加global result语句来明确允许此操作:

result = []

def get_digits(n):  
    global result  
    # ...

print(get_digits(12345))仍然无法正常工作,因为get_digits(n//10)不返回任何内容。您将需要类似的东西

get_digits(12345)
print(result)

但是,我建议不要在函数中定义result并返回它,并建议您在函数中递归调用get_digits时返回。

def get_digits(n):
    def helper(result, n):
        if n == 0:
            result = list(reversed(result))
            return result
        else:
            result.append(n % 10)
            return helper(result, n // 10)
    return helper([], n)

然后,print(get_digits(12345))可以正常工作。

答案 2 :(得分:0)

在函数中本地创建一个空变量可以解决此错误。

例如:

def string_splosion(str):
  for i in range(len(str)):
    result = result + str[:i+1]
  return result

这引起了我错误:“分配前已引用本地变量'结果'”

这清楚地表明未定义变量“ 结果”来存储迭代值。因此,我需要在类似于以下代码的函数中声明一个字符串变量。

def string_splosion(str):
      result = "" #This line proned to error.
      for i in range(len(str)):
        result = result + str[:i+1]
      return result