Quick start guide
Содержание:
- Python NumPy
- Capturing condition values
- PyPy
- And now for something completely different
- Веб-разработка
- Обработка текстов
- Среда разработки и хостинг Python Anywhere
- Редакторы и IDE, разработанные для Python
- Major new features of the 3.9 series, compared to 3.8
- Major new features of the 3.8 series, compared to 3.7
- Компилируйте ваши модули Python с помощью Cython
- Делаем обвязку над библиотекой на языке C
- Заключение
Python NumPy
NumPy IntroNumPy Getting StartedNumPy Creating ArraysNumPy Array IndexingNumPy Array SlicingNumPy Data TypesNumPy Copy vs ViewNumPy Array ShapeNumPy Array ReshapeNumPy Array IteratingNumPy Array JoinNumPy Array SplitNumPy Array SearchNumPy Array SortNumPy Array FilterNumPy Random
Random Intro
Data Distribution
Random Permutation
Seaborn Module
Normal Distribution
Binomial Distribution
Poisson Distribution
Uniform Distribution
Logistic Distribution
Multinomial Distribution
Exponential Distribution
Chi Square Distribution
Rayleigh Distribution
Pareto Distribution
Zipf Distribution
NumPy ufunc
ufunc Intro
ufunc Create Function
ufunc Simple Arithmetic
ufunc Rounding Decimals
ufunc Logs
ufunc Summations
ufunc Products
ufunc Differences
ufunc Finding LCM
ufunc Finding GCD
ufunc Trigonometric
ufunc Hyperbolic
ufunc Set Operations
Capturing condition values
Assignment expressions can be used to good effect in the header of
an if or while statement:
# Loop-and-a-half while (command := input("> ")) != "quit": print("You entered:", command) # Capturing regular expression match objects # See, for instance, Lib/pydoc.py, which uses a multiline spelling # of this effect if match := re.search(pat, text): print("Found:", match.group(0)) # The same syntax chains nicely into 'elif' statements, unlike the # equivalent using assignment statements. elif match := re.search(otherpat, text): print("Alternate found:", match.group(0)) elif match := re.search(third, text): print("Fallback found:", match.group(0)) # Reading socket data until an empty string is returned while data := sock.recv(8192): print("Received data:", data)
PyPy
Гидо ван Россум однажды сказал: «Если вы хотите, чтобы ваш код работал быстрее, вам, вероятно, следует просто использовать PyPy». Я загрузил переносимые двоичные файлы в папку, а в папке bin скопировал pystone.py. Затем я запустил это так: Мы просто установили PyPy 3 с помощью Ubuntu Snap:
$ sudo snap install pypy3 --classic
Результаты бенчмарка:
$ pypy3 pystone.py 1000000 Pystone(1.1.1) time for 1000000 passes = 0.359845 This machine benchmarks at 2.77897e+06 pystones/second $ pypy3 pystone.py 1000000 Pystone(1.1.1) time for 1000000 passes = 0.26776 This machine benchmarks at 3.73469e+06 pystones/second $ pypy3 pystone.py 1000000 Pystone(1.1.1) time for 1000000 passes = 0.147859 This machine benchmarks at 6.7632e+06 pystones/second
Для данного теста результаты выполнения до «разгона» показывают более 10 кратное, а после «разгона» более чем 26 кратное ускорение производительности.
Создание исполняемого файла требует больше работы. Вы должны написать свой Python в подмножестве RPython.
And now for something completely different
href=»http://www.montypython.net/scripts/galaxy.php»>Our universe itself keeps on expanding and expanding,
In all of the directions it can whiz;
As fast as it can go, at the speed of light, you know,
Twelve million miles a minute and that’s the fastest speed there is.
So remember, when you’re feeling very small and insecure,
How amazingly unlikely is your birth;
And pray that there’s intelligent life somewhere out in space,
‘Cause there’s bugger all down here on Earth!
Version | Operating System | Description | MD5 Sum | File Size | GPG |
---|---|---|---|---|---|
Gzipped source tarball | Source release | e2f52bcf531c8cc94732c0b6ff933ff0 | 24149103 | SIG | |
XZ compressed source tarball | Source release | 35b5a3d0254c1c59be9736373d429db7 | 18019640 | SIG | |
macOS 64-bit installer | Mac OS X | for OS X 10.9 and later | 2f8a736eeb307a27f1998cfd07f22440 | 30238024 | SIG |
Windows help file | Windows | 3079d9cf19ac09d7b3e5eb3fb05581c4 | 8528031 | SIG | |
Windows x86-64 embeddable zip file | Windows | for AMD64/EM64T/x64 | 73bd7aab047b81f83e473efb5d5652a0 | 8168581 | SIG |
Windows x86-64 executable installer | Windows | for AMD64/EM64T/x64 | 0ba2e9ca29b719da6e0b81f7f33f08f6 | 27864320 | SIG |
Windows x86-64 web-based installer | Windows | for AMD64/EM64T/x64 | eeab52a08398a009c90189248ff43dac | 1364128 | SIG |
Windows x86 embeddable zip file | Windows | bc354669bffd81a4ca14f06817222e50 | 7305731 | SIG | |
Windows x86 executable installer | Windows | 959873b37b74c1508428596b7f9df151 | 26777232 | SIG | |
Windows x86 web-based installer | Windows | c813e6671f334a269e669d913b1f9b0d | 1328184 | SIG |
Веб-разработка
Python это популярный язык для веб-разработки.
Все пакеты Python, перечисленные в этом
разделе, делают жизнь веб-разработчика
гораздо проще.
Beautiful Soup. Библиотека Python для быстрого парсинга HTML- и XML-файлов.
scrape. Модуль Python для веб-браузинга и скрапинга.
mechanize. Очень полезный модуль, благодаря которому вы получаете эмулятор браузера для взаимодействия с веб-страницами.
libgmail. Обеспечивает доступ к гугловскому сервису Gmail.
Google Maps. Благодаря этому модулю можно использовать веб-сервисы платформы Google Maps в своем приложении на Python.
Requests позволяет невероятно легко отсылать HTTP/1.1-запросы.
Selenium. При помощи этого модуля разработчики могут программными методами открывать веб-страницы, заполнять поля, кликать по кнопкам и отсылать формы.
pyquery позволяет делать jQuery-запросы в XML-документах. API этой библиотеки максимально приближен к jQuery. Для быстрой манипуляции с XML и HTML pyquery использует LXML.
Обработка текстов
Стандартная библиотека содержит несколько модулей для работы со строками и обработки текстов, включает в себя следующие возможности.
Полезные константы и функции из модуля string
Модуль содержит различные константы, которые можно использовать при обработке текстов, например:
ascii_letters (строка, содержащая все буквы из набора ASCII), ascii_lowercase, digits (строка с цифрами от 0 до 9), letters (буквы, зависят от установки локали) и т. п.
>>> from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits >>> ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> ascii_lowercase 'abcdefghijklmnopqrstuvwxyz' >>> ascii_uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> digits '0123456789'
Сгенерировать пароль:
>>> chars = ascii_letters + digits >>> from random import choice >>> n = 8 # длина пароля >>> ''.join(choice(chars) for _ in range(n)) 'ia1KGm2t'
Для упрощения подстановки в строки по ключевым словам могут использоваться экземпляры класса . Пример иллюстрирует методы и :
>>> from string import Template >>> tpl = Template("""${name} has ${amount}$$. {oh}""") >>> tpl.substitute({"amount" 100, "name" "John"}) 'John has 100$. {oh}' >>> tpl.safe_substitute({"amount" 100}) '${name} has 100$. {oh}' >>> # Для сравнения синтаксиса, метод format для строки: >>> """{name} has {amount}$. {{oh}}""".format(**{"amount" 100, "name" "John"}) 'John has 100$. {oh}'
Поддержка регулярных выражений: модуль re
Регулярные выражения являются мощным средством обработки текста. Модуль re содержит функции для замены (), разбиения строки (), сравнения строки с шаблоном (, ), поиска (, ) и определяет классы для скомпилированного регулярного выражения и результата сравнения. Пример:
>>> import re >>> compiled_re = re.compile(r"*") >>> m.group() for m in compiled_re.finditer("A1 c123 a12, b abc (b987).")] 'a12', 'b', 'a', 'b', 'b987'
Работа с байтовыми структурами в модуле struct
Модуль struct служит для конвертирования данных из строк байтов и типами данных языка Python и может применяться при работе с форматами бинарных файлов и коммуникационными протоколами.
Функции и позволяют «упаковывать» и «распаковывать» данные на основе строки формата, состоящей их кодов форматирования, например:
>>> from struct import pack, unpack >>> pack('hh', 1, 2) # h - код для короткого целого со знаком '\x01\x00\x02\x00' >>> unpack('bbbb', 'ABCD') # b соответствует символу со знаком (65, 66, 67, 68)
Порядок байтов многобайтных данных можно задать в строке форматирования, например:
>>> pack('!l', 1025) # сетевой (от старшего к младшему, big-endian) '\x00\x00\x04\x01' >>> pack('>l', 1025) # от старшего к младшему, big-endian '\x00\x00\x04\x01' >>> pack('<l', 1025) # от младшего к старшему, little-endian '\x01\x04\x00\x00'
В модуле также определяется класс , методы которого соответствуют функциям модуля.
Среда разработки и хостинг Python Anywhere
Эта облачная платформа имеет в своём составе IPython, несущий дополнительные удобства для продвинутых пользователей: расширенный командный синтаксис, подсветку кода, автоматическое дополнение, добавляет возможность использования пространств имён и т.д
Однако новичкам не надо на этом заострять внимание – это им может пригодиться чуть позже, после изучения основ
PythonAnywhere.com – это идеальный вариант для использования Python 3 онлайн. Все возможности Python IDE на этом замечательном сайте можно найти тем, кто желает создать и разместить веб-приложение в Сети. Раздел «Try IPython» прекрасное добавочное подспорье.
https://www.pythonanywhere.com/
Редакторы и IDE, разработанные для Python
PyCharm
Тип: IDE
Сайт: https://www.jetbrains.com/pycharm/
Одной из лучших полнофункциональных IDE, предназначенных именно для Python, является PyCharm. Существует как бесплатный open-source (Community), так и платный (Professional) варианты IDE. PyCharm доступен на Windows, Mac OS X и Linux.
PyCharm «из коробки» поддерживает разработку на Python напрямую — откройте новый файл и начинайте писать код. Вы можете запускать и отлаживать код прямо из PyCharm. Кроме того, в IDE есть поддержка проектов и системы управления версиями.
Преимущества: это среда разработки для Python с поддержкой всего и вся и хорошим коммьюнити. В ней «из коробки» можно редактировать, запускать и отлаживать Python-код.
Недостатки: PyCharm может медленно загружаться, а настройки по умолчанию, возможно, придётся подкорректировать для существующих проектов.
Spyder
Тип: IDE
Сайт: https://github.com/spyder-ide/spyder
Spyder — open-source IDE для Python, оптимизированная для data science. Spyder идёт в комплекте с менеджером пакетов Anaconda, поэтому вполне возможно, что он у вас уже установлен.
Что в Spyder интересно, так это то, что его целевой аудиторией являются data scientist’ы, использующие Python. Например, Spyder хорошо взаимодействует с такими библиотеками для data science, как SciPy, NumPy и Matplotlib.
Spyder обладает той функциональностью, которую вы можете ожидать от стандартной IDE, вроде редактора кода с подсветкой синтаксиса, автодополнения кода и даже встроенного обозревателя документации.
Отличительной особенностью Spyder является наличие проводника переменных. Он позволяет просмотреть значения переменных в форме таблицы прямо внутри IDE. Также хорошо работает интеграция с IPython/Jupyter.
Про Spyder можно сказать, что он более «приземлённый», чем другие IDE. Его можно рассматривать как инструмент для определённой цели, а не как основную среду разработки. Что в нём хорошо, так это, что он бесплатный, open-source и доступный на Windows, macOS и Linux.
Преимущества: вы data scientist, который пользуется Anaconda.
Недостатки: более опытные разработчики на Python могут найти Spyder недостаточно функциональным для повседневной работы и сделают свой выбор в пользу более функциональной IDE или редактора.
Thonny
Тип: IDE
Сайт: http://thonny.org/
Thonny называют IDE для новичков. Написанный и поддерживаемый Институтом информатики Тартуского университета в Эстонии, Thonny доступен на всех основных платформах.
По умолчанию Tonny устанавливается с версией Python, идущей в комплекте, поэтому вам не понадобится устанавливать ещё что-нибудь. Продвинутым пользователям, возможно, придётся изменить эту настройку, чтобы IDE нашла и использовала уже установленные библиотеки.
Преимущества: вы начинающий Python-программист и вам нужна IDE, с которой можно сразу идти в бой.
Недостатки: продвинутым пользователям будет недостаточно функциональности, а встроенный интерпретатор они заменят. Кроме того, учитывая новизну IDE, могут возникнуть проблемы, решения которых на данный момент нет.
Major new features of the 3.9 series, compared to 3.8
Many new features for Python 3.9 are still being planned and written. Among the new major
new features and changes so far:
- PEP 602, Python adopts a stable annual release cadence
- BPO 38379, garbage collection does not block on resurrected objects;
- BPO 38692, os.pidfd_open added that allows process management without races and signals;
-
A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384.
-
(Hey, fellow core developer, if a feature you find important is missing from this list, let Łukasz know.)
The next pre-release of Python 3.9 will be 3.9.0a4, currently scheduled for 2020-02-17.
Major new features of the 3.8 series, compared to 3.7
- PEP 572, Assignment expressions
- PEP 570, Positional-only arguments
- PEP 587, Python Initialization Configuration (improved embedding)
- PEP 590, Vectorcall: a fast calling protocol for CPython
- PEP 578, Runtime audit hooks
- PEP 574, Pickle protocol 5 with out-of-band data
- Typing-related: PEP 591 (Final qualifier), PEP 586 (Literal types), and PEP 589 (TypedDict)
- Parallel filesystem cache for compiled bytecode
- Debug builds share ABI as release builds
- f-strings support a handy specifier for debugging
- is now legal in blocks
- on Windows, the default event loop is now
- on macOS, the spawn start method is now used by default in
- can now use shared memory segments to avoid pickling costs between processes
- is merged back to CPython
- is now 40% faster
- now uses Protocol 4 by default, improving performance
There are many other interesting changes, please consult the «What’s New» page in the documentation for a full list.
Компилируйте ваши модули Python с помощью Cython
Если совсем нет желания
редактировать проект, но хочется хоть какого-нибудь улучшения
производительности без лишних усилий, ваш лучший друг – Cython.
Хотя Cython не является транспайлером общего назначения с Python в С, он позволяет скомпилировать модули Python в файлы общих объектов (). Их можно загрузить в ваш основной скрипт на Python.
Для этого потребуется
установить на машине как собственно Cython, так и
компилятор С:
$ pip3 install cython
Если вы работаете на Debian системе, загрузите GCC следующим образом:
$ sudo apt install gcc
Давайте разделим изначальный код примера на два файла с названиями и :
# название файла: test_module.pyx def sum_of_lists(ls): '''считает сумму значений переданного списка списков''' s = 0 for l in ls: for val in l: s += val return s
Наш главный файл должен импортировать эту функцию с файла :
# название файла: test_cython.py from test_module import * # создать список списков целых чисел smallrange = list(range(10000)) inlist = # получить сумму list_sum = sum_of_lists(inlist) print(list_sum)
Теперь напишем скрипт для компиляции нашего модуля при помощи Cython:
# название файла: setup.py from setuptools import setup from Cython.Build import cythonize setup( ext_modules=cythonize("test_module.pyx") )
Наконец пришло время скомпилировать наш модуль:
$ python3 setup.py build_ext --inplace
Теперь сравним эффективность
этой версии с оригинальной, произведя, снова-таки, тысячу измерений.
В этом случае Cython улучшил производительность нашей программы почти вдвое по сравнению с первым вариантом. Но этот показатель будет меняться в зависимости от того, какого рода код вы пытаетесь оптимизировать.
Если вам нужно будет воспользоваться преимуществами Cython в Jupyter Notebook, то там доступна волшебная команда . С ней вы скомпилируйте свои функции без особых усилий.
Делаем обвязку над библиотекой на языке C
Пишем библиотеку на C
pyfoo_c_01
foo.h
foo.cpp
main.c
Makefile
foofoo
foo_c_01/ └── foo ├── foo.c ├── foo.h ├── main.c └── Makefile
foo
binfoo
foo_c_01/ └── foo ├── bin │ ├── foo.o │ ├── libfoo.a │ ├── main │ └── main.o ├── foo.c ├── foo.h ├── main.c └── Makefile
mainmain
Основы работы с SIP
pyproject.tomlpyfoo_cfoofoobinfoo
pyproject.toml
pyproject.tomlpyproject.tomlpyproject.tomlfoo
foo_c_01/ ├── foo │ ├── bin │ │ ├── foo.o │ │ ├── libfoo.a │ │ ├── main │ │ └── main.o │ ├── foo.c │ ├── foo.h │ ├── main.c │ └── Makefile └── pyproject.toml
pyproject.toml
- build-backend описывает, с помощью чего мы будем собирать наш пакет. Строго говоря, этот параметр в виде строки должен содержать полное название Python-объекта, который будет заниматься сборкой. Если не задумываться над глубоким содержимым этого параметра, то для пакетов, собираемых с помощью SIP, это значение должно равняться «sipbuild.api».
pyfoopyfoo
- headers — список заголовочных файлов, которые необходимы для использования библиотеки foo.
- libraries — список объектных файлов, скомпилированных для статической линковки.
- include-dirs — путь, где искать дополнительные заголовочные файлы помимо тех, что прилагаются к компилятору C. В данном случае, где искать файл foo.h.
- library-dirs — путь, где искать дополнительные объектные файлы помимо тех, что прилагаются к компилятору C. В данном случае это папка, в которой создается скомпилированный файл библиотеки foo.
pyfoo.sip
pyfoo.sippyproject.toml
foo_c_01/ ├── foo │ ├── bin │ │ ├── foo.o │ │ ├── libfoo.a │ │ ├── main │ │ └── main.o │ ├── foo.c │ ├── foo.h │ ├── main.c │ └── Makefile ├── pyfoo.sip └── pyproject.toml
pyfoo.sippyproject.tomlpyfoonamepyfoo.sip
pyfoo.sip%Module(name=foo, language=«C»)namelanguage%Modulenamefoofoo
foo
language%Modulepyfoo.sip
Собираем и проверяем
pyfoo_c_01/foo/make
foobinlibfoo.apyfoo_c_01
- sip-build. Создает объектный файл Python-расширения (Python extension).
- sip-install. Создает объектный файл Python-расширения и устанавливает его.
- sip-sdist. Создает пакет в виде архива .tar.gz, который можно установить с помощью pip.
- sip-wheel. Создает пакет в формате wheel (файл с расширением .whl).
- sip-module. Создает модуль, в который включается только служебные инструменты, необходимые самому SIP. Это нужно, если вы создаете библиотеку, разбитую на несколько пакетов. В этой статье мы не будем рассматривать такой случай, мы будем создавать только так называемый standalone project, то есть наш пакет будет единый, он будет включать и библиотеку, для которой мы делаем обвязку, и все служебные инструменты.
- sip-distinfo. Создает и заполняет папку .dist-info, которая используется в пакете в формате wheel.
pyproject.tomlsip-build—verbosesip-build —verbosebuild/foo/
pyfoo_c_01 ├── build │ └── foo │ ├── apiversions.c │ ├── array.c │ ├── array.h │ ├── bool.cpp │ ├── build │ │ └── temp.linux-x86_64-3.8 │ │ ├── apiversions.o │ │ ├── array.o │ │ ├── bool.o │ │ ├── descriptors.o │ │ ├── int_convertors.o │ │ ├── objmap.o │ │ ├── qtlib.o │ │ ├── sipfoocmodule.o │ │ ├── siplib.o │ │ ├── threads.o │ │ └── voidptr.o │ ├── descriptors.c │ ├── foo.cpython-38-x86_64-linux-gnu.so │ ├── int_convertors.c │ ├── objmap.c │ ├── qtlib.c │ ├── sipAPIfoo.h │ ├── sipfoocmodule.c │ ├── sip.h │ ├── sipint.h │ ├── siplib.c │ ├── threads.c │ └── voidptr.c ├── foo │ ├── bin │ │ ├── foo.o │ │ ├── libfoo.a │ │ ├── main │ │ └── main.o │ ├── foo.c │ ├── foo.h │ ├── main.c │ └── Makefile ├── pyfoo.sip └── pyproject.toml
build/foosipfoocmodule.cfoo
func_foobuild/foo/foo.cpython-38-x86_64-linux-gnu.sosip-install—target-dirsip-sdist
pyfoo-0.1.tar.gz
pyfoofoofoo
char*char*strfoochar*foo
char*pyproject.toml
pyfoo-0.1-cp38-cp38-manylinux1_x86_64.whl
—upgradefoopyfoo
Заключение
В этой статье был представлен краткий обзор нескольких инструментов для создания графических
приложений, доступных к использованию из Python. Также мы описали общие принципы построения
GUI-приложений (схема событийно управляемых приложений), независимо от того, каким инструментом будет
реализована отрисовка виджетов.
Показаны простейшие примеры кода для различных инструментов. Вы можете их взять за основу для
проверки готовности системы (установки и настройки всех требуемых компонентов), и в качестве стартового
приложения для придания требуемой функциональности.
В следующей статье мы продолжим знакомство с технологиями, позволяющими создавать GUI-приложения в
Python.
Похожие темы
- Тонкости использования языка Python: Часть 8. Особенности взаимодействия с C++. Проект SWIG и обратная интеграция Python в С/C++ приложения.
- Тонкости использования языка Python: Часть 10. 2D графика и GUI-сценарии.
- Марк Лутц, «Программирование на Python», Том 1, 4-е издание
- An Introduction to Tkinter
- PyQt
- Differences Between PySide and PyQt
- Учебник PyGTK 2.0
- PyGObject — GLib/GObject/GIO Python bindings
- Кратко о PyGI