Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2017 04:29:57

stas90
Зарегистрирован: 2017-05-04
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как пишутся модули

Всем привет!
Недавно начал изучение python'a, все не могу понять, на чем и как пишутся для него модули?

Например, нужно сделать приложение для конвертации фото в pdf, нашел модуль img2pdf,
но как он сделан? Как анализируется файл img и как происходит перекодирование в pdf?

Так же и многие другие модули, например PIL, как они пишутся или нужно просто знать структуру файла (например связка abc в файле jpg определяет цвет, def - высота, ghi - ширина, jkl - сама картинка) а дальше
if abc … : и поехали?

Модули в основном пишутся на питоне или на С и других низкоуровневых языках?


Спасибо!

Отредактировано stas90 (Май 4, 2017 05:39:47)

Офлайн

#2 Май 4, 2017 07:39:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Как пишутся модули

stas90
на чем и как пишутся для него модули?
Каждый .py файл - это модуль. Если пустой сделаешь, то будет пустой модуль. Его можно импортировать в питон. Если же в нём есть функции какие-нибудь, то при импортировании имя модуля становится пространством имён для этих функций и через его имя можно к ним обращаться.

stas90
Например, нужно сделать приложение для конвертации фото в pdf, нашел модуль img2pdf,
но как он сделан? Как анализируется файл img и как происходит перекодирование в pdf?
Все модули открыты, ты можешь зайти и посмотреть внутри, что там происходит. Обычно такие модули делают на базе уже готовых библиотек ( .dll или .so ), а в этих библиотеках уже реализованы функции (библиотека - это библиотека функций, сложенных вместе, которые можно вызывать, подключившись к библиотеке).

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

stas90
Модули в основном пишутся на питоне или на С и других низкоуровневых языках?
И на питоне, и на C, зависит от нужной скорости модуля. Большие данные на C очень быстро обрабатываются, поэтому часто вся тяжёлая работа делается на C. А вот base64, например, сделан на питоне, потому что чаще base64 используется для небольших данных.

https://github.com/python/cpython/tree/master/Lib
https://github.com/python/cpython/blob/master/Lib/base64.py

https://github.com/python/cpython/blob/master/Lib/csv.py
https://github.com/python/cpython/blob/master/Modules/_csv.c

https://github.com/python/cpython/blob/master/Lib/re.py
https://github.com/python/cpython/blob/master/Modules/_sre.c



Отредактировано py.user.next (Май 4, 2017 07:50:10)

Офлайн

#3 Май 4, 2017 09:34:43

stas90
Зарегистрирован: 2017-05-04
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как пишутся модули

Большое спасибо за развернутый ответ!

py.user.next
модули делают на базе уже готовых библиотек ( .dll или .so ), а в этих библиотеках уже реализованы функции
Т.е. сейчас программирование(решение какой-либо задачи) в основном заключается в поиске нужной библиотеки/модуля и ее применении?

Чем отличается CPython от Python? Прочитал несколько статей, но так и не разобрался

Еще раз огромное спасибо за ответ!

Отредактировано stas90 (Май 4, 2017 09:36:40)

Офлайн

#4 Май 4, 2017 11:21:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Как пишутся модули

stas90
Чем отличается CPython от Python?
Python - это язык программирования, язык программирования - это просто набор логических правил, по которым цепочка символов исходного кода преобразуется в цепочку команд компьютеру. Соответственно, такой преобразователь цепочек можно написать на любом языке. Вот для питона и существует множество интерпретаторов. Есть CPython, есть Jython и так далее. Вот CPython - это классическая реализация интерпретатора языка Python на языке C. Ну, там не просто одинаковые реализации языка, а ещё с какими-то дополнительными плюшками. Где-то ограничения стека убраны, где-то можно классы вызывать какие-то. В общем, новичку это не надо.

stas90
Т.е. сейчас программирование(решение какой-либо задачи) в основном заключается в поиске нужной библиотеки/модуля и ее применении?
Не, есть модули, твоя задача - их соединить правильно друг с другом. Каждый модуль - как инструмент, нужный для строительства дома, а дом строишь ты сам своими руками, используя эти инструменты. Соответственно, если у тебя плана нет, то и молоток с пилой за тебя его не нарисуют. Допустим, один модуль может подключаться к Интернету, другой модуль может выбирать фотографии, третий модуль может конвертировать фотографии. Ты должен с помощью первого модуля подключиться к Инетернету, с помощью второго - выбрать фотографию, а с помощью третьего - сконвертировать фотографию во что-то. Но эти модули друг о друге не знают, в один конвейер их соединяешь ты. И это не всегда просто, особенно если программа не два притопа три прихлопа.



Отредактировано py.user.next (Май 4, 2017 11:26:14)

Офлайн

#5 Май 4, 2017 12:00:44

stas90
Зарегистрирован: 2017-05-04
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как пишутся модули

Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version