Начинающий питонист задает вопросы

Apr 16, 2011 00:57

"Каждый настоящий программист должен написать свой язык программирования." Удивительно, но некоторые действительно пишут.

Нахожусь в процессе освоения языка Python (Питон). Последний раз я язык программирования изучал лет 10 назад, да. А первый - 25 или 30 тому назад? Ну какие я прошел - программируемый калькулятор, бейсик, фортран, Си, Си++, Dbase+Foxbase, Delphi, SQL, и наконец 1С:Предприятие 7 (8 с натяжкой). Получается 1С - вершина (творения :).

И вот потянуло снова. Я простоту люблю (мозг слабоват для сложных вещей). А Питон - кажется простым.

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

Но здесь я хочу записать те особенности Питона, о которые спотыкаюсь. Возможно, через какое-то время я узнаю язык получше и написанное здесь окажется бредом. Не страшно - через "новичка и дилетанта" я проходил много раз в разных направлениях (как-нибудь надо написать об этом отдельно).

Итак, Питон. Еще раз - в целом очень неплохо. Интерпретатор, возможность сразу обкатывать команды - здорово. Есть "питоновский стиль" - я пока только чувствую, что он есть, но сам еще не владею.

Теперь вопросы/проблемы.
Меня напрягает индексация элементов списков (и т.п.) с нуля. Я могу понять, почему это сделано для С (смещения указателей и пр.), но не понимаю, в чем удобство такой индексации для языка высокого уровня? Первый элемент должен писаться как a[1], а не как a[0]. Каков смысл создавать диапазон индексов от нуля до (РазмерСписка-1)? Не ухватил.

Теперь срезы (выборка элементов из списка по диапазону индексов) - типа a[2:4] возвращает элементы со 2-го по 4-й. Все здорово, но у меня в первой же задаче понадобилось исключение диапазона, а не выборка (ну а как доп. миноры матриц получать?). Возможно, и есть такая возможность - но я не нашел. А если бы Питон поддерживал циклические диапазоны типа a[4:2] (выборка с 4-го элемента до конца списка и потом с начала - до 2-го элемента),- то проблема исключения решалась бы просто и элегантно.

Но это все мелочи. Серьезной проблемой является отсутствие (еще раз оговорюсь, что "отсутствие для меня" - возможно, что на самом деле все есть, но я еще не дошел) удобной работы с множествами (которые отношения). Питон заточен на индексы (списки, словари) - видимо, поэтому на него удобно переходить с Фортрана (и Матлаба), но, вообще говоря, "индексный код" плохо читаем. В то же время отношения (множества элементов, кортежей) - встречаются на каждом шагу.
Какой бы код я хотел видеть для работы с множеством? Ну примерно такой:

For Item in Set
Item.ID = 1 # эта запись понятнее, чем Item[0] = 1 и проще чем Item[ID] = 1
Item.Name = "Имя"
# и т.д.

Может, для такого стиля кодирования надо классы создавать (поля описывать) - не знаю, пока далеко не заплывал, а все учебные примеры выполнены в "индексном стиле".

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

Ну и поддержка основных реляционных операций - выборка, соединение, агрегирование и пр.
Вот такой язык нужен - может, и есть уже? Может, и Питон это все тоже имеет, или предоставляет возможность разработать такие классы самому - узнаем со временем.

Полезные ресурсы по языку Питон

Программирование, Структуры данных

Previous post Next post
Up