2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Оптимизация кода в Python
Сообщение21.01.2011, 01:25 
Вопрос к тем кто знает Python:

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

1. Отличается ли скорость выполнения заданной заранее и после примененной функции, линейного кода метода класса? И как? Стоит ли выигрыш в скорости усложнения читабельности кода, если писать его линейно?

2. Как сделать объект принадлежащим сразу двум классам, не создавая класс-наследник? Это в принципе возможно?

3. Как лучше считывать большой объем текстовой информации из файла и сортировать ее построчно? Создавать массив, сортировать и заново переписывать не очень разумно. И может ли Питон импортировать из текстового файла переменные без преобразования?

4. К вопросу о массиве. Нужно сортировать строки по убыванию числового значения в начале строки каждый раз перед закрытием файла. Значения изменяются каждый раз при работе программы, плюс добавляются новые строки. Как это реализовать? О_о

5. Можно ли импортировать декораторы?

Заранее спасибо

 
 
 
 Re: Оптимизация кода в Python
Сообщение21.01.2011, 08:21 
Аватара пользователя
Выигрыш в производительности не стоит читабельности кода при использовании интерпретируемых языков никогда. Если вам позарез нужна производительность, возьмите C и пишите на нём читабельный код.

1. Не понял ничего.
2. А зачем?
3. Использовать внешнюю сортировку?
4. Не понял, в чём сложность.
5. Можно, это обыкновенные функции.

 
 
 
 Re: Оптимизация кода в Python
Сообщение21.01.2011, 22:29 
Пожалуй Вы правы, выигрыш действительно того не стоит...

В С, точнее в С++ либо нет некоторых возможностей, либо они реализованы так, что я буду год писать, а потом пять - разгребать( Как вариант - переписать впоследствии некоторые модули на С++, когда будет отлажен алгоритм.

1. К примеру: есть функция func(x, y). Применяется она от силы один-два раза. Стоит ли ее писать отдель, как функцию, или лучше написать линейный код пару раз?

2. Например есть класс "женщины" и класс "мужчины", есть класс "брюнеты" и класс "рыжие". И надо создать объекты "рыжая женщина", "рыжий мужчина", "мужчина-брюнет", "женщина-брюнетка". Для каждого класса свой довольно внушительный список методов.

3, 4. В принципе уже разобрался. Сделал так: программа считывает информацию из файла при запуске, в процесс работы добавляет\убирает значения, и перед выходом сортирует и записывает обратно в файл.

 
 
 
 Re: Оптимизация кода в Python
Сообщение22.01.2011, 20:48 
Аватара пользователя
Да, написать и отладить на питоне, а потом переписать на C — это вполне вариант.

1. На вызов функции тратится некоторое время, но не большое. Если ф-ция вызывается пару раз — лучше её выписать отдельно. Вот если бы она вызывалась много раз в секунду, можно было бы подумать об оптимизации (инлайне).

2. Сначала долго думать, нужно ли вам такое. Обычно это означает ошибку в дизайне программы, но не всегда. Если действительно нужно — гуглить по словам python mixins. Например, см. http://www.wellho.net/resources/ex.php4?item=y112/m_i_m .

 
 
 
 Re: Оптимизация кода в Python
Сообщение22.01.2011, 23:26 
1. разве в Питоне есть инлайн или аналог? О_о

2. Есть как вариант классы с меньшим кол-вом атрибутов вывести в мета и выбирать их при создинии объекта через if-else.
Суть то такая: есть ионы, радикалы и нейтральные частицы, а также есть органические и неорганические молекулы. Программа должна сама определять, органика это или нет и тип частицы.

 
 
 
 Re: Оптимизация кода в Python
Сообщение24.01.2011, 08:34 
Аватара пользователя
1. Нет. Но для пары вызовов функции он и не нужен.

 
 
 
 Re: Оптимизация кода в Python
Сообщение24.01.2011, 08:46 
vir.mirabilis в сообщении #403258 писал(а):
1. разве в Питоне есть инлайн или аналог? О_о
Питон умеет вызывать библиотечные функции написанные на c++, кроме того, c++ умеетможно научить работать с питоновскими классами. Про это можно почитать в стандартной документации Питона.
Написать на Питоне, потом критичные по скорости места переписать на с++ -- стандартный подход. Так большинство модулей было написано.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group