#python
#python
Вопрос:
Некоторым методам не нужно создавать новую переменную, т.е. lists.reverse()
работает следующим образом:
lists = [123, 456, 789]
lists.reverse()
print(lists)
этот метод делает себя обратным (без новой переменной).
Почему существуют разные способы создания переменной в Python?
Некоторые случаи, которые похожи на variable.method().method2().method3()
, печатаются непрерывно, но type(variable)
и print()
таковыми не являются. Почему мы не можем печатать как variable.print()
или variable.type()
?
Есть ли какие-либо философские причины для Python?
Комментарии:
1. Просто потому, что Python разработан таким образом. И, кстати, цепочка методов не считается лучшей практикой в Python, поскольку это снижает читаемость и усложняет отступ.
2. Как правило, методы, которые изменяют значение на месте, не возвращают результат. В некоторых случаях может быть встроен возвращающий результат. Например,
reversed(seq)
который не изменяетseq
, но возвращает результат (фактически итератор, который вам нужно преобразовать в желаемый тип, напримерresult = list(reversed(seq))
).
Ответ №1:
Вас может смутить разница между функцией и методом, а также три разных назначения для них. Как бы мне не нравилось использовать SO в учебных целях, эти проблемы могут быть трудны для понимания из другой документации. Вы можете достаточно легко найти функцию против метода — как только вы узнаете, что это (немного) отдельная проблема.
Ваш первый вопрос касается системного дизайна. Python просто облегчает то, что хотят сделать программисты, и это различие является общим для многих (большинства?) языков программирования, поскольку ASM и FORTRAN вылезли из двоичных пулов слизи в те дни, когда динозавры бродили по земле.
Когда вы разрабатываете, как работает ваше приложение, вам нужно принять много решений по реализации: отдельные переменные против последовательности, встроенное кодирование против функций, отдельные функции против закрытых функций против классов и методов и т.д. Частью этого процесса принятия решений является то, что должна делать каждая функция. Вы подняли три основных типа:
(1) Обработайте эти данные — возьмите заданные данные и измените их, переставьте, что угодно, что нужно сделать — но мне не нужна предыдущая версия, только улучшенная версия, поэтому просто поместите новый материал туда, где был старый материал. Это используется почти исключительно, когда обрабатывается одна переменная; обычно мы не берем четыре отдельные переменные и не изменяем каждую из них. В этом случае мы поместили бы их все в список и изменили список (одну переменную). reverse
относится к этому классу.
Одно важное замечание заключается в том, что для такой функции рассматриваемый аргумент должен быть изменяемым (способным к изменению). Python имеет изменяемые и неизменяемые типы. Например, список является изменяемым; кортеж неизменяем. Если бы вы хотели изменить кортеж на противоположный, вам нужно было бы вернуть новый кортеж; вы не можете изменить оригинал.
(2) Скажите мне что-нибудь интересное — возьмите данные и извлеките некоторую информацию. Однако мне понадобятся оригиналы, поэтому оставьте их в покое. Если мне нужно запомнить это классное новое понимание, я помещу его в свою собственную переменную. Это функция, которая возвращает значение. sqrt
является одной из таких функций.
(3) Взаимодействовать с внешним миром — вводить или выводить данные постоянно. Для вывода ничего в программе не меняется; мы можем представить данные в удобном для чтения формате, но мы ничего не меняем внутренне. print
есть такая функция.
Большая часть этого решения также зависит от предназначения функции: является ли это «глагольной» функцией (что-то делать) или функцией существительного / атрибута (посмотрите на эти данные и скажите мне, что вы видите)?
Теперь вы получаете интересную работу для себя: изучаете искусство системного проектирования. Вам нужно достаточно ознакомиться с доступными инструментами программирования, чтобы у вас было представление о том, как их можно комбинировать для формирования полезных приложений.
Ответ №2:
Смотрите документацию:
reverse()
Метод изменяет последовательность на месте для экономии места при переворачивании большой последовательности. Чтобы напомнить пользователям, что он работает с побочным эффектом, он не возвращает обратную последовательность.