如果我们定义了一个全局 list,但是在函数中排序并赋值,
g_list = [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
def sort_list():
g_list = sorted(g_list, key=lambda x: x)
sort_list()
这样会报错:
UnboundLocalError: local variable 'g_list' referenced before assignment
因为函数中的 g_list
只存在于这个上下文中,例如就算我们在函数中定义一个新的 g_list
也不会影响外面的 g_list
:
g_list = [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
def sort_list():
g_list = [1, 2, 3]
print(id(g_list), g_list)
print(id(g_list), g_list)
sort_list()
print(id(g_list), g_list)
得到的输出是:
140431561309440 [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
140431561305088 [1, 2, 3]
140431561309440 [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
如果我们想在函数内给 g_list
重新赋值,可以这样写:
g_list = [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
def sort_list():
g_list[:] = [1, 2, 3]
print(id(g_list), g_list)
print(id(g_list), g_list)
sort_list()
print(id(g_list), g_list)
同理,排序后的重新赋值也可以写成:
g_list = [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]
def sort_list():
g_list[:] = sorted(g_list, key=lambda x: x)
sort_list()