Quick start guide

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
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *