Python 为什么说UnboundLocalError:localvariable';最大量程';当我已分配它时,在分配之前引用它

Python 为什么说UnboundLocalError:localvariable';最大量程';当我已分配它时,在分配之前引用它,python,python-3.x,local-variables,Python,Python 3.x,Local Variables,为什么我已经分配了“名称‘最大范围’未定义”。 这是对一个问题的尝试 示例阵列: array = [1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6] def largestRange(array): # Write your code here. sub_array = array # substitute array as it will be modified later3 Range = [0,0] max_range = [

为什么我已经分配了“名称‘最大范围’未定义”。 这是对一个问题的尝试 示例阵列:

array = [1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6]

def largestRange(array):
    # Write your code here.
    sub_array = array # substitute array as it will be modified later3
    Range = [0,0]
    max_range = [0,0]
    
    def run() :
        global max_range
        num = min(sub_array)
        Range = [num]
        running = True
        while running :
            num += 1
            if num not in sub_array :
                Range.append(num - 1)
                running = False
                pass
            else :
                sub_array.remove(num)
                pass
            pass
        print(Range)
        print(max_range)
        if (max_range[1] - max_range[0]) <= (Range[1] - Range[0]) :
            max_range = Range
        if len(sub_array) != 0:
            run()
        pass
    
    run()
    print(max_range)
    return max_range
    pass
largestRange(array)
stack overflow说我的问题主要是代码,所以我只写这行代码,这样我就可以发布问题了

示例可复制的代码:

def largestRange(array):
    # Write your code here.
    sub_array = array  # substitute array as it will be modified later3
    Range = [0, 0]
    max_range = [0, 0]

    def run():
        global max_range
        num = min(sub_array)
        Range = [num]
        running = True
        while running:
            num += 1
            if num not in sub_array:
                Range.append(num - 1)
                running = False
                pass
            else:
                sub_array.remove(num)
                pass
            pass
        print(Range)
        print(max_range)
        if (max_range[1] - max_range[0]) <= (Range[1] - Range[0]):
            max_range = Range
        if len(sub_array) != 0:
            run()
        pass

    run()
    print(max_range)
    return max_range


pass
largestRange([1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6])
def最大范围(数组):
#在这里编写代码。
sub_数组=数组#替换数组,因为它将在以后修改3
范围=[0,0]
最大范围=[0,0]
def run():
全局最大范围
num=min(子数组)
范围=[num]
运行=真
运行时:
num+=1
如果num不在子数组中:
Range.append(num-1)
运行=错误
通过
其他:
子数组。删除(num)
通过
通过
打印(范围)
打印(最大范围)

如果(最大范围[1]-最大范围[0])
max\u范围
全局范围中定义。所以“通过defualt”,它在函数的局部范围中也是可见的

max_range=无论什么
def run():
....
打印(最大范围)#正常
但是,在函数内部设置
max\u range=range
,然后将
max\u range
视为函数的局部变量,即在all函数中,它与全局
max\u range

max_range=无论什么
def run():
....
打印(最大范围)#错误,因为本地最大范围尚未声明
max_range=range#这使max_range成为本地的
编辑(编辑问题)
global
关键字适用于全局变量。在代码中,您在函数(不在全局范围内)中定义了
max_range
,并且希望在内部函数中对其进行更改。您可以实现这一点,例如,将其作为参数并返回修改后的值:

def最大范围(数组):
...
最大范围=[0,0]
def运行(最大范围):
... # 你的密码是什么
返回最大范围
最大范围=运行(最大范围)
...

在Python中,默认情况下,分配给的变量被视为局部变量。。。i、 e.在

x = 3

def foo():
    print(x)   # <--- error: x is considered a local
               # because of next statement, but at this
               # point it has not yet received any value
    x = 5
x=3
def foo():

打印(x)#我不明白我的意思是保留原始代码(否则问题的标题没有意义),但要在下面添加修改后的代码,请编辑问题,使其正确。请HH sryy现在我该怎么办?好的,我会这么做,但我该如何做更改请参见6502的答案,使用
global
keyword,但当它给出文件“/tester/program.py”,第23行,运行中打印(最大范围)名称错误:名称“最大范围”不是defined@Mehul:没有。。。错误是
UnboundLocalError:赋值前引用的局部变量“max_range”
。在第一个示例中,您将得到关于
x
的相同错误。Python决定它是本地的,但是如果你在赋值之前使用它,它会给出你得到的错误。我非常困惑,我现在该怎么办??请告诉我,我对蟒蛇很陌生等等,我会的
x = 3

def foo():
    print(x)   # <--- error: x is considered a local
               # because of next statement, but at this
               # point it has not yet received any value
    x = 5
x = 3

def foo():
    global x # <--- this informs x is global even if there are assignments
    print(x) # <--- prints the global
    x = 5 # <--- ok, this changes the global