Модераторы: pythonwin, Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переводим Python FAQ, на русский язык 
:(
    Опции темы
srd
Дата 27.3.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 7
Всего: 49



1. Extending/Embedding FAQ
1.1 Могу ли я создавать свои собственные функции на Си?
Да, вы можете создавать встроенные модули, содержащие функции, переменные, исключения и даже новые типы данных на Си. Это объясняется в документе «Расширение и встраивание интерпретатор Питона», находящегося по адресу http://docs.python.org/ext/ext.html.
Большинство книг о Питоне для пользователей среднего и высокого уровня также затрагивают эту тему.
1.2 Могу ли я создавать свои собственные фунции на Си++?
Да, если использовать свойства Си++, совместимые с Си. Заключите заголовочные файлы Питона в extern “C” {…} и добавляйте extern “C” перед каждой функцией, которая будет вызываться интерпретатором. Но использование глобальных или статических объектов Си++, имеющих конструкторы - это, возможно, не очень хорошая идея.
1.3 Писать на Си – это сложно. Существуют ли какие-нибудь другие варианты?
Есть несколько способов для написания ваших собственных Си-расширений. Это зависит от того, что вы хотите сделать.
Для достижения более высокой скорости можно использовать Psyco (http://psyco.sourceforge.net/), генерирующий ассемблерный код для x86 на основе питоновского байт-кода. Если вы работаете на машине с процессором, совместимым с архитектурой x86, то вы можете использовать Psyco для компиляции наиболее критичных по времени функций в вашем коде и для получения значительных улучшений с наименьшими усилиями
Pyrex (http://www.cosc.canterbury.ac.nz/%7Egreg/python/Pyrex/) – это компилятор, генерирующий код на Си на основе незначительно модифицированного кода на Питоне. Pyrex позволяет создавать расширения без изучения питоновского C API.
Если вы нуждаетесь в интерфейсе к некоторой Си-библиотеке, для которой пока не существует питоновского расширения, то с помощью такого инструмента, как SWIG (http://www.swig.org/ ), вы можете попытаться создать обёртки для библиотечных функций и типов. Для Си++ могут быть использованы SIP (http://www.riverbankcomputing.co.uk/sip/), CXX (http://cxx.sourceforge.net/), Boost (http://www.boost.org/libs/python/doc/index.html ) и Weave (http://www.scipy.org/site_content/weave).
1.4 Как я могу из Си выполнить некоторые инструкции Питона?
Это можно сделать с помощью высокоуровневой функция PyRun_SimpleString(), которая принимает простую строку в качестве параметра и выполняет её в контексте модуля __main__. Функция возвращает 0 в случае успешного завершения и -1, если во время выполнения случилась исключительная ситуация (включая SyntaxError). Если вам нужны дополнительные возможности, то обратитесь к функции PyRun_String() и исходному коду функции PyRun_SimpleString() в файле Python/pythonrun.c.
1.5 Как я могу из Си вычилсить некоторое выражения Питона?
Вызовите функцию PyRun_String(), упоминающуюся в предыдущем вопросе, с стартовым символом Py_eval_input. Функция выполнит разбор выражения, вычислит его и вернёт значение этого выражения.
1.6 Как мне в Си получить значения из питоновского объекта?
Это зависит от типа объекта. Для кортежа функция PyTupleSize(o) возвращает его длину, а PyTuple_GetItem(o, i) – его i-ый элемент. Для списков существую аналогичные функции PyListSize(o) и PyList_GetItem(o, i).
Для строки функция PyString_Size(o) возвращет её длину, а PyString_AsString(o) – указатель на её значение. Обратите внимание на то, что питоновские строки могут содержать нулевые байты, потому не используйте с ними функцию strlen().
Для определения типа объекта сперва убедитесь, что он не NULL, а потом воспользуйтесь функциями PyString_Check(o), PyTuple_Check(o), PyList_Check(o) и т.п.
Также существует высокоуровневый API к питоновским объектам, предоставляющий так называемый «абстрактный» интерфейс. Изучите файл Include/abstract.h, чтобы узнать подробности. Этот интерфейс обеспечивает взаимодействие с любой питоновской последовательностью с помощью как таких функций, как PySequence_Length(), PySequence_GetItem() и многие другие полезные возможности.




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
allexdav
Дата 15.4.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


лоботомированное тело тиклского питоноида



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.3.2006
Где: Россия, Нижний Но вгород

Репутация: 3
Всего: 3



1.4.15 Почему при выходе из питона освобождается не вся память?
Ссылки на объекты из глобального пространства имен модулей питона не всегда уничтожаются при выходе из питона. Это может происходить, если существуют круговые ссылки. Также существует некоторая память, выделяемая библиотекой С, которую невозможно очистить (пер. средствами питона) ( утилиты, как Purify могут позаботиться об этом ). Но питон, тем не менее, старается очистить всю память при выходе и удалить каждый несвязанный объект.
Если вы хотите заставить питон удалить конкретные объекты при освобождении памяти – используйте функцию sys.exitfunc().

1.14.16 Почему типы кортеж (tuple) и список (list) разделены?
Списки и кортежи одинаковы во многих отношения, но используются фундаментально разными способами. Кортежи –это аналог записей ( пер. record ) Паскаля или структур ( пер. struct ) Си. Это небольшие наборы связанных данных, которые могут быть разных типов и все операции над ними производятся как над группой. Например, декартова (Cartesian) координата соответствует кортежу из двух или трех чисел.
Списки, с другой стороны, аналоги массивов в других языках. Они хранят некоторое количество объектов одного типа, и операции над ними производятся отдельно. Например, os.listdir('.') возвратит список строк, соответствующих файлам в текущем каталоге. Функции, которые работают с этим выводом обычно работают нормально. Если вы добавите несколько файлов в каталог.
Кортежи – неизменны. Это значит, что если кортеж был создан, то вы не можете изменить какой-нибудь элемент. Списки – изменяемы. Только неизменяемые элементы могут быть использованы как ключи словарей ( пер. dictionary ), следовательно только кортежи могут быть использованы как ключи.

Это сообщение отредактировал(а) allexdav - 15.4.2006, 23:21
PM MAIL ICQ   Вверх
allexdav
Дата 15.4.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


лоботомированное тело тиклского питоноида



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.3.2006
Где: Россия, Нижний Но вгород

Репутация: 3
Всего: 3



1.14.17 Как реализованы списки?
Списки питона на самом деле являются массивами переменной длины, не так, как в Лиспе (пер.  Лисп. Бивис, он сказал Лисп ). В реализации используются последовательный массив ссылок на другие объекты, в заголовке массива храниться длина и указатель на элемент массива. Это позволяет сделать индексацию как a[i] операцией, не зависящей от размера списка и значения индекса.
Когда элементы добавляются или присоединяются ( пер. append ) – массив ссылок изменяет размеры. Для улучшения производительности при росте размера массива он увеличивается с запасом, то есть добавление следующего элемента занимает меньше времени, так как не требуется дополнительного выделения памяти.

1.14.18 Как реализованы словари?
Словари в питоне реализованы как изменяемые хеш таблицы. Это дает лучшую производительность по сравнению с бинарными деревьями при поиске ( наиболее часто используемой операции) во многих случаях, и реализация этого проще.
Каждый элемент словаря – это хеш, возвращаемый встроенной функцией hash(). Хеш код сильно варьируется в зависимости от ключа. Например "Python" хешируется в -539294296, а "python" в 1142331976 ( пер. вроде обычный хеш. Зачем на этом внимание заострять? ). Хеш код используется для вычисления места во внутреннем массиве, где записано значение ключа. Если все ваши хранимые ключи имеют разные хеши, то извлечение элемента из словаря занимает фиксированное время ( сложность алгоритма О (1) ). Также это значит что элементы словаря не сортированы, и вывод элементов словаря по .keys() и .items() будет производиться в некотором произвольном порядке.

PM MAIL ICQ   Вверх
allexdav
Дата 17.4.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


лоботомированное тело тиклского питоноида



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.3.2006
Где: Россия, Нижний Но вгород

Репутация: 3
Всего: 3



1.2.3 Есть ли какие – нибудь важные проекты, сделанные на питоне?
На  http://www.pythonology.org/success есть список проектов, использующих питон. Протоколы консультаций на официальном сайте содержат требования многих компаний и организаций.
Заметные питоновские проекты это Mailman – менеджер списков рассылки и Zope – сервер приложений В некоторых  дистрибутивах Линукса, например Red Hat, часть инсталлятора и приложений для системного администрирования написаны на Питоне. Компании, которые используют Питон – это Google, Yahoo, и Industrial Light & Magic

  

Это сообщение отредактировал(а) allexdav - 17.4.2006, 14:16
PM MAIL ICQ   Вверх
allexdav
Дата 17.4.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


лоботомированное тело тиклского питоноида



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.3.2006
Где: Россия, Нижний Но вгород

Репутация: 3
Всего: 3



1.2.7 Питон и проблема Y2K ( 2000 год)
С августа 2003 не было заметных проблем и проблема Y2K  уже не существенна.
Питон производит очень мало вычислений дат и они производяться с помощью функций Си библиотеки. Питон как правило представляет время как количество секунд, прошедших с 1970 года или как ( год, месяц, число ) кортеж, где год – это число, состоящее из 4 чисел, что решает проблему 2000. Итак, если ваша библиотека С в порядке, то и Питон – в порядке. Конечно, возможно что отдельные приложения написанные на Питоне делают преобразование к числу из двух цифр.
Так как Питон доступен для изменения – абсолютной гарантии нет. Если происходят непредвиденные проблемы, то это больше  проблема пользователя, а не разработчиков, и вы никого не можите преследовать в судебном порядке. Авторское право Питона содержит следующее: 
4. PSF is making Python 2.3 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.3 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.3 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.3, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
(пер. здесь про отсутствие гарантий на что – либо )
Хорошие новости – это то, что если вы нашли проблему, то у вас есть полные исходники Питона для того, чтобы найти ее и устранить. Это – преимущество приложений с открытым исходным кодом
  

Это сообщение отредактировал(а) allexdav - 17.4.2006, 14:17
PM MAIL ICQ   Вверх
allexdav
Дата 24.4.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


лоботомированное тело тиклского питоноида



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 19.3.2006
Где: Россия, Нижний Но вгород

Репутация: 3
Всего: 3



1.3.1 Что за модуль bsddb185, и почему мое приложение жалуется на него?
Начиная с версии Питона 2.3, установщик содержал в себе модуль PyBSDDB http://pybsddb.sf.net/ как замену старого модуля bsddb. Он включает в себя функции, обеспечивающие обратную совместимость на уровне API, но требует более новую версию библиотеки Berkeley DB . Файлы, которые были созданы с помощью старого модуля bsddb не могут быть открыты с помощью нового модуля.

Используя вашу старую версию Питона и пару скриптов,  которые являются частью версии 2.3  (db2pickle.py и pickle2db.py, в каталоге Tools/scripts) вы сможете преобразовать ваши старые файлы к новому формату. Используя вашу старую версию Питона, запустите файл db2pickle.py, чтобы сделать копию.
python2.2 <pathto>/db2pickley.py database.db database.pck
Затем переименуйте ваш файл базы данных
mv database.db olddatabase.db
Теперь преобразуйте копию в новый формат
python2.3 <pathto>/pickle2db.py database.db database.pck
Команды могут отличатся от указанных, в зависимости от вашей установки питона (путей). Для получения полной информации о этих операциях с этими скриптами посмотрите в прилагаемую справку (докстринги )

 
PM MAIL ICQ   Вверх
bilbobagginz
Дата 6.6.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



1.4.22 (в настоящем FAQ-е - уже 1.4.23)   Почему в языке python нет ключевого слова goto?
Для создания "структурного goto" можно использовать исключения. Этот механизм сработает и между различными функциями. Многие солгасятся что исключения удобно эмулируют все целесообразные приложения механизма "go" или "goto" как в языках Си, Фортран и др. языков. 
Например:
Код

class ярлык: pass # объявляем ярлык

try:
     ...
     if (условие): raise ярлык() # эквивалентно "goto ярлык"
     ...
except ярлык: # куда делать goto
     pass
...

Да, это не позволит вам запрыгнуть в бегущий цикл, но такое желание само по себе неестественно, и считается злоупотреблением goto, поэтому используйте его умеренно.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Ypiii
Дата 18.12.2017, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.12.2017

Репутация: нет
Всего: нет



Курсы программирования на pyhton с нуля https://imprium.ru/courses/kursy-python-online
Рекомендую!
PM MAIL   Вверх
Google
  Дата 23.7.2018, 04:50 (ссылка)  





  Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.