Существуют ли правила, когда метод изменяет объект «на месте» или возвращает новый объект? - PullRequest
1 голос
/ 28 мая 2019

Я готовлюсь к экзамену, и всегда возникают вопросы, спрашивающие, меняет ли метод объект на месте или создает новый объект. Интересно, применяются ли к этому какие-либо общие правила или мне просто нужно запомнить результат для разных методов?

Примеры из моего экзамена:

s = 'horse'
s.upper()
print(s)

это сгенерирует horse, а не HORSE, и, следовательно, s не изменяется на .upper, однако

l = [1, 3, 2]
l.sort()
print(l)

будет генерировать [1, 2, 3], а не [1, 3, 2], и, следовательно, l изменяется на .sort

Есть ли какие-либо способы провести различие между ними?

1 Ответ

1 голос
/ 28 мая 2019

Нет реальных общих способов запомнить это. Вы должны помнить в индивидуальном порядке. Вы можете помнить, что строки неизменны и никогда не изменяются . И вы можете помнить, что метод .sort явно возвращает None, чтобы напомнить людям, что он сортирует по месту, и что вам нужно использовать функцию sorted(), если вы хотите вместо этого копию. Но они специфичны для строк и сортировки, зная, что это вообще не поможет вам обобщать.

Вообще говоря, такие знания просто накапливаются с использованием. В практическом повседневном программировании никто не должен знать это наизусть, так как вы всегда будете загружать документацию во время кодирования и / или вы будете использовать небольшие фрагменты в интерактивной командной строке, чтобы подтвердить их работу. Изучение этого наизусть для теста не имеет практической цели при дальнейшем использовании; скорее всего, вы должны помнить те несколько типов и функций, которые были явно упомянуты в ваших уроках, если вам представлен ранее неизвестный тип, ваше предположение будет таким же, как у меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...