2016-10-01 6 views
-1

Я тестирую обратную функцию. Мой код выглядит следующим образом:Локальное и глобальное использование переменных в 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]], но он работает только внутри моей функции ,

Я не смог изменить его в глобальной переменной. Как я могу это сделать? Спасибо

ответ

1

L - это только локальная переменная, и присвоение ему нового объекта не изменит первоначальный список; все, что он делает, это указать имя L в функцию другому объекту. См. Ned Batchelder's excellent explanation about Python names.

Вы могли бы заменить все элементы в в списке L References назначая к [:] идентичности среза вместо:

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() 
+0

Большое вам спасибо. Это помогает мне с вашим объяснением! – Julie

 Смежные вопросы

  • Нет связанных вопросов^_^