упражнение python для всех L8

#python

#python

Вопрос:

не могли бы вы помочь мне разобраться в одном упражнении, которое относится к теме списков (глава 8 — https://www.py4e.com /)?

вот мой код:

 def delete_head(t):
    del t[0]
letters = ['a', 'b', 'c', 'd', 'f', 'g']
q = delete_head(letters)
print(q)
delete_head(letters)
print(letters)
  

Я получил этот вывод:

вывод

Я не могу понять, почему вывод не похож на [‘b’, ‘c’, ‘d’, ‘f’, ‘g’]

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

1. Взгляните на PythonTutor для лучшего понимания того, что делает скрипт. Вы удаляете дважды. Кроме того, ваша функция ничего не возвращает, поэтому print(q) печатает None .

2. Ваша функция всегда удаляет первый элемент в списке «t[0]». Что именно вы хотите, чтобы это делало?

3. Я понял. Я дважды удалил заголовок списка. Спасибо, друзья

4. Всегда, когда вы запускаете эту функцию, вы удаляете первый символ вместо того t , на что ссылается ссылка. Не имеет смысла присваивать выходные данные переменной, если вы не указали return . Даже если вы вернетесь t , вы увидите, что t is q это равно True . Чтобы явно создать копию, чтобы избежать такого поведения, введите: t.copy() .

Ответ №1:

 q = delete_head(letters)
  

Это удаляет ‘a’

 delete_head(letters)
  

и это удаляет ‘b’ (поскольку ‘a’ уже нет)

Ответ №2:

Вы вызываете delete_head() дважды, сначала в строке 4, где вы присваиваете возвращаемое значение функции q, и второй раз в строке 6.

Обратите внимание, что q равно None . Это потому, что ваша функция не возвращает список. Он получает ссылку на исходный список и удаляет первый элемент. Он не возвращает список, но изменения не теряются, потому что вы используете ссылку на исходный список. Поэтому возвращаемое значение delete_head() равно None