#python #python_3x #списки
Сейчас плотно изучаю нюансы методов встроенных типов, и есть один вопрос, на который не могу найти ответ. В Python 3.3 ввели метод списка copy(), который делает поверхностную копию. Но то же самое можно было делать, просто взяв срез без границ - list[:] Зачем было вводить новый метод? Подозреваю, что какая-то причина есть. Например, сначала я считал таким же ненужным нововведением метод list.clear(), введённый в том же Python 3.3, ведь есть же list = [] А потом я прочитал, что эти две синтаксические конструкции по разному работают в ситуациях, когда на список ссылаются две или более переменных. Подозреваю, что и для copy() существует такое же очевидное задним числом обоснование, но найти его пока не смог.
Ответы
Ответ 1
Чтобы сделать операции del list_[:] и shallow_copy = list_[:] более очевидными (discoverable) и читаемыми для новичков (list_.clear() и shallow_copy = list_.copy() соответственно). See Add list.clear() and list.copy() В целом, в Питоне есть предпочтение к использованию слов вместо пунктуации, например: and, or вместо &&, || или on_true if cond else on_false вместо cond ? on_true : on_false или re.search(regex) вместо /regex/. Дополнительно, наличие явного метода list_.clear() может уменьшить вероятность возможной ошибки:list_ = [] существенно отличается от del list_[:] (первая конструкция создаёт новый список и привязывает его к имени list_, вторая конструкция удаляет все элементы из существующего объекта (изменяемой последовательности такой как список наиболее вероятно)). Недостаток, что эти методы дублируют функциональность изменяемых последовательностей/отображений (объекты с __getitem__, __delitem__ методами).
Комментариев нет:
Отправить комментарий