LINUX.ORG.RU

Вопрос по python (mutable/immutable и аргументы функций)


0

0

В python эффекта передачи аргументов по ссылке можно добиться только при использовании mutable объектов. Для изменения immutable объекта x приходится использовать конструкцию вроде x = f(x, ...). Так?

★★★★★

> В python эффекта передачи аргументов по ссылке можно добиться только при использовании mutable объектов. Для изменения immutable объекта x приходится использовать конструкцию вроде x = f(x, ...). Так?

да. Только вот скажи пожалуйста, зачем изменять объект передаваемый в функцию (используя питон) - очень интересно?

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

Как это зачем? Скажем, есть некоторая структура, реализованная в виде кортежа (tuple) и операции над этой структурой. При этом классы городить неохота. Что делать? Либо использовать список вместо кортежа, либо извращаться с присваиванием.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> Либо использовать список вместо кортежа, либо извращаться с присваиванием.

1. Вообще лучше писать в стиле когда ничего не изменяеться (аля функционально) т.е. максимум функций должны быть ортогональными. Передаюшь данные - исходные ни в коем случае не меняеться. Неужели нелогично что функция которая возвращает результат, не изменяя исходные данные намного надёжнее и гибче. Вообще советую почитать про ФП а также "Искусство программирования в Unix".

2. Как уже заметил ero-sennin кортедж не предназначен для изменения - используй список.

CrazyPit ★★★
()
Ответ на: комментарий от ero-sennin

Это понятно, но кроме списков и кортежей есть строки и числа, как с ними быть? Потом, реализация иерархических структур данных в виде вложенных кортежей (например, бинарных деревьев) потребует функционального подхода .

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> мсье читает мои мысли :)

А то с недавних пор - дипломированный телепат!

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

>мммм? а чем списки не угодили?

Очень даже угодили. Просто непонятно, зачем вообще нужны tuples, если есть такие универсальные списки. Наверное просто tuples эффективнее в плане производительности.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> зачем вообще нужны tuples

Ну ка зачем именно для этого и нужны. Представлять составные данные в немутабельном виде. Например кооридинаты, или цвета или ещё что такое.

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

>Представлять составные данные в немутабельном виде. Например кооридинаты, или цвета или ещё что такое.

Причём, эти данные по смыслу должны быть immutable, т.е. константными, а иначе при каждом изменении придётся заново выделять под них память. Т.о. у tuples очень узкая область применения - составные постоянные структуры данных. Но совсем непонятно, зачем строки делать immutable. Ну да ладно, видимо это такая особенность python.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> зачем вообще нужны tuples

Именно, работа с ними быстрее. имхо они еще и памяти меньше кушают.

Да и за счет того, что они не изменяемые, их можно делать ключами словарей (dict).

Minmax
()

>Для изменения immutable объекта приходится

А ты силён:-)

DonkeyHot ★★★★★
()
Ответ на: комментарий от seiken

> Но совсем непонятно, зачем строки делать immutable.

Ну, в общем-то, понятно. В очень многих программах строки на самом деле не изменяются (взятие подстроки и конкатенация - это не модификация, единственный полезный вариант модификации - in-place regex substitution, как в перле), а немодифицируемая строка эффективнее и проще в реализации (никаких тебе copy-on-write и стратегий переаллокации). В C++ вон до сих пор все реализации std::string во всех вариантах STL страдают от каких-нибудь дефектов (то тормозная, то не тредсейфная, то вызывает фрагментацию памяти).

В Java строки тоже immutable.

anonymous
()

По моему, ты хочешь писать на питоне, как на Си.

Во первых, функция может вернуть несколько результатов.
Во вторых - на питоне классы городить не нужно. просто написал и всё.
Вся разница - одна строка с class myclass: и дописывание self. в качестве первого аргумента функций.

smartly ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.