использование локальных и глобальных переменных в Python

#python #list #global-variables #reverse #local-variables

#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 в функции на другой объект. См. Отличное объяснение Неда Батчелдера об именах Python.

Вы можете заменить все элементы в L ссылках на список, присвоив [:] вместо этого фрагменту идентификатора:

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

Однако изменяемые последовательности, такие как списки, имеют list.reverse() метод, поэтому вы можете просто изменить список на месте с помощью этого:

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

Комментарии:

1. Большое вам спасибо. Мне очень помогает ваше объяснение!