如何在Python 3中修复UnboundLocalError?

时间:2017-11-18 13:01:37

标签: python python-3.x

todolist = []

def add_item(item):
    todolist =  todolist + [item]

def main():

    add_item(1)

    print(todolist)


if __name__ == '__main__':
    main()

我正在尝试创建一个名为add_item()的函数,它的作用类似于append(),我不允许使用任何内置函数。我一直收到UnboundLocalError。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

即使您修复了局部变量问题,您的代码也不会像list.append那样运行。追加是通过有状态的副作用来操作,改变它所运行的列表;您的代码创建了一个新列表并分配了一个名称。我可以想到在不使用命名方法的情况下以这种方式改变列表的唯一方法是slice assignment

def myappend(intolist, newitem):
    intolist[len(intolist):] = [newitem]

但这显然使用内置len函数,并将赋值转换为setitem调用。通过使用隐式bool和getitem调用,可以避免使用len。但电话仍在那里;基本上,只有不执行任何操作的程序才能在不调用内置函数的情况下运行。

答案 1 :(得分:0)

因为语句@Echo Off Set "num1=3" Set "num2=3" Set "expo=3" Set/A base=num1*num2 Set "rslt=1" For /L %%A In (1 1 %expo%) Do Set/A rslt*=base Echo %rslt% Pause 是一个创建局部变量todolist = todolist + [item]的赋值语句,所以隐藏了具有相同名称的全局变量。因此,您必须使用关键字global指定变量在全局范围内。

todolist

使用def add_item(item): global todolist todolist = todolist + [item] 时,

append()

没有赋值操作,因此不会创建变量,而是使用全局范围中的变量。

答案 2 :(得分:-1)

检查以下代码:

todolist = []

def add_item(item):
    global todolist
    todolist = todolist + [item]

def main():
    add_item(1)
    print(todolist)


if __name__ == '__main__':
    main()