如果我们定义了一个全局 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()

参考资料