Python 中的局部和全局变量使用

local and global variable usage in Python

我正在测试反向功能。我的代码如下:

def deep_reverse(L):

    new_list = []
    for element in L:
        new_list += [element[::-1]]
    L = new_list[::-1]


L = [[1, 2], [3, 4], [5, 6, 7]]
deep_reverse(L)
print(L)

我希望我的输出 L 可以像 [[7, 6, 5], [4, 3], [2, 1]],但它只在我的函数中起作用。

我无法在全局变量中更改它。我怎样才能让它发生?谢谢

L只是一个局部变量,给它赋值一个新的对象不会改变原来的列表;它所做的只是将函数中的名称 L 指向另一个对象。参见 Ned Batchelder's excellent explanation about Python names

您可以通过分配给 [:] 标识切片来替换列表 L 引用中 中的所有元素:

L[:] = new_list[::-1]

但是,像列表这样的可变序列有一个 list.reverse() method,因此您可以就地反转列表:

L.reverse()

对每个子列表执行相同的操作:

def deep_reverse(L):
    """ assumes L is a list of lists whose elements are ints
    Mutates L such that it reverses its elements and also 
    reverses the order of the int elements in every element of L. 
    It does not return anything.
    """
    for element in L:
        element.reverse()
    L.reverse()