Найти - Пользователи
Полная версия: Python. Переменные. Тип переменных
Начало » Python для новичков » Python. Переменные. Тип переменных
1 2
FishHook
4kpt_IV
Ты не вполне понял. Во-первых, не нужно само преобразование (которое лишняя операция) в большинстве случаев. Я придумал только один юзкейс - использование кортежа как ключа словаря. Во-вторых, операция преобразования элементарна. Перемещения данных при этом не производится, память не выделяется. В твоем примере buffer += i на каждой итерации происходит выделение новой памяти и копирование в нее содержимого кортежа, что более затратно чем преобразование из списка в кортеж. Ну а добавление в конец списка, как понимаешь, тоже почти О(1). То есть по сути операции с кортежами можно сказать совсем не нужны, они безболезненно заменяются на операции со списками на небольшом наборе данных, а на большом наборе операции со списками безальтернативны ввиду в разы меньшей сложности.
Во-вторых, я не против того, что сам по себе пустой кортеж имеет право на существование. Это можно было бы реализовать вот так tuple(), но пустые скобки в питоне крайне противоречивая ситуация, потому что вот это кортеж
 a = ()
а вот это не кортеж
 a = (1)

ровно как вот это множество
 d = {1}
а вот это нет
 d = {}

это какая-то очень некрасивая гнилая вишенка на торте. Когда мы в основном имеем логичный последовательный синтаксис, но вдруг на ровном месте такие кривые исключения. Для пустых значений базовых структур вполне можно было бы обойтись без минимализма и создавать объект как любой другой: list(), dict(), set(), tuple()
4kpt_IV
FishHook
То есть по сути операции с кортежами можно сказать совсем не нужны, они безболезненно заменяются на операции со списками на небольшом наборе данных, а на большом наборе операции со списками безальтернативны ввиду в разы меньшей сложности.

Насчет сложности согласен. Это ты меня не понял. Изменение типа внутри обработчика это избыточная операция и неважно сколько она занимает если она не несет в дальнейшем никакой бизнес логики (перестановку элементов, удаление дублей, и т.п.). Плюс есть такое понятие как соответствие типа принимаемого и возвращаемого значения. Нужно лишний раз следить, чтобы возвращался кортеж, а в функциях где несколько точек выхода приходится городить лишние обработчики или все возвраты оборачивать в tuple. Ну и никто не предлагает на офигенных массивах использовать операцию конкатенации, где задача “обжата” по времени. Даже для текста она затратна. Это и ежику понятно. Просто она имеет право на жизнь и даже иногда может ее облегчить.

FishHook
это какая-то очень некрасивая гнилая вишенка на торте. Когда мы в основном имеем логичный последовательный синтаксис, но вдруг на ровном месте такие кривые исключения. Для пустых значений базовых структур вполне можно было бы обойтись без минимализма и создавать объект как любой другой: list(), dict(), set(), tuple()

Да. Согласен. Как я понимаю оно тянется еще с 1 ветки. Хотя PyCharm уже ругается иногда. Правда пока только на словари.
Rodegast
> Хотя, по идее type вообще не должен был всплывать - что указывало бы на динамическую типизацию (отличие Python от других языков).
> Про динамическую типизацию ясно. Однако в данном случае произошла ошибка с примером: пример должен был показать динамический тип переменной а. Что делать?

У тебя переменная “a” меняет свой тип: сначала это число, затем строка, а потом кортеж. Это и есть динамическая типизация.
https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
ZerG
я у же реально по вопросам вижу кто читает лутца а кто задает тупые вопросы
ZerG
Вот я за свой коммент получил от топик стартера минус с комментарием

“Неинформативность. Хамское поведение”

Камрад - когда ты прочитаешь лутца и осознаешь - ты сам себе сюда ответишь так же…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB