Краткая справка по Python 3

В сети можно найти много материала по данному языку. Например, мне нравится: https://pythonworld.ru/samouchitel-python

Оглавление

Краткая справка по Python 3. 1

Все необходимое для работы с последовательностями. 1

Все необходимое для работы с массивами. 5

Простая работа с изображениями. 9

 

 

Все необходимое для работы с последовательностями.

                Программа на Python пишется в файлах с расширением py. Запустить программу (здесь из файла 1.py) в Linux можно командой:

python3 1.py

Переменные не надо определять/описывать. Тип переменной (например, бывают целые и вещественные переменные) задается присваиванием ей значения. Тип переменной не фиксируется. Новое присваивание может сменить тип переменной. На самом деле, присваивание не присваивает значение, а делает левую часть оператора присваивания ссылкой на объект, создающийся в правой части.

Блоки (в циклах, операторах if и т.д.) выделяются одинаковым отступом слева (например, табуляцией).

                Пусть последовательность целых чисел записана в файле по одному числу в строке. Для работы с файлом его надо открыть (по аналогии с C), последовательно прочитать строки (как строки!),  преобразовать каждую строку в целое число и делать с ним что угодно.

                В следующем примере распечатываются все числа последовательности, заданной в файле (по одному числу в строке):

 

                Оператор print выводит по умолчанию аргументы через пробел с переходом на следующую строку в конце. Это поведение можно изменить:

i=1;j=2;k=3;print(i,j,k, sep=',',end='.')

Будет выведено: 1,2,3.  (без перехода на следующую строку).

                Также в функции print можно указать, что вывод должен производиться в файл: fout=open(”out.txt”,”w”); print(”Hello!\n”,file=fout);fout.close();

                Арифметические операции, практически, такие же, как в С, но нет операций ++, --. Возведение в степень как в Фортране (радость для тех, кто понимает J ): 2**3 дает 8.

                Операции сравнения совпадают с С.

                Логические операции: and, or, not

                Пример поиска минимума последовательности:

                Здесь использован оператор

Выражение1 if Логичыражение else Выражение2

его значение равно Выражение1 если  Логичыражение истинно, иначе выражение равно Выражение2 .

 

                Синтаксис оператора if можно понять из следующего примера решения задачи поиска суммы всех чисел последовательности, кратных 3:

 

Не забывайте ставить двоеточие!

 

                Исключения (по аналогии с С++) являются основным средством работы с ошибками. Пример ловли исключения, выбрасывающегося в случае невозможности открытия файла:

 

 

                Конечно, желательно решать задачи внутри отдельных функций. Пример оформления определения и вызова функции для вышеприведенной задачи:

                В приведенном примере интересно использование множественного присваивания: мы возвращаем из функции сразу несколько значений через запятую и слева от знака присваивания пишем аналогичную конструкцию. Например:

a,b,c,d=1,2,3,4

 

                Подключить модуль из стандартной библиотеки можно с помощью инструкций import и from :

from math import sqrt

a=sqrt(2)

 

или

 

import math

a=math.sqrt(2)

 

                Абсолютно аналогично можно подключить собственный модуль (=файл) и использовать подпрограммы из него. Файл с модулем можно размещать в той же папке, что и основная выполняемая программа.

                Если числа заданы в файле не по одному числу в строке и/или если между числами возможны различные разделителя, то требуется разбиение строки на слова. Для этого используется член класса строки split с последующим перебором всех слов из получившегося списка. Например, в случае предыдущей задачи это можно сделать так:

 

 

                То же самое можно сделать более коротко и с игнорированием ошибочных слов:

                Для понимания работы со строками приведем пример решения следующей задачи:

Текстовый файл содержит строки, состоящие из слов, разделенных пробелами и табуляциями. Написать функцию, возвращающую самое короткое слово, состоящее из одной цифры в первой позиции слова и далее из букв английского языка, и его длину. Также функция должна возвращать код ошибки.

 

 

                Здесь следует обратить внимание, что строки индексируются с 0. Обращаться к символу строки с индексом k можно str[k]. Обращаться к подстроке в интервале индексов от from до to (to не включается!) следует как str[from:to] .

Для строк доступны функции вида is*, аналогичные функциям языка С.

 

                Аналогом массивов в Python являются списки.

Все необходимое для работы с массивами.

 

                Создать пустой список m (=массив) можно командой

m=[]

                Добавить элемент в конец списка:

m.append(v)

                Удалить элемент с индексом i из списка:

m.pop(i)

Если у вас есть список m, то можно обращаться к его элементам так же, как и в языке С. Например: m[0]=m[1]

                Список является итерируемым объектом, т.е. можно писать:

for x in m:

  

                В предыдущем примере фраза

[s for s1 in str.split(' ') for s2 in s1.split('\t') for s in s2.split('\n') if s!=""]

 

на самом деле, создает список непустых слов в строке, разделенных пробелами, табуляциями и символом перехода на следующую строку.

                Ничто не мешает создавать список списков.

                Приведем пример программы, которая вводит из файла список отрезков на прямой и проверяет, принадлежит ли отрезок из первой строки файла объединению отрезков, записанных в последующих строках файла.

                Для проверки мы напишем функцию, которая проверяет принадлежность отрезка, заданного в первом списке отрезков, объединению отрезков, заданному во втором списке отрезков.

                Функция последовательно исключает отрезки, заданные во втором списке отрезков, изо всех отрезков первого списка (изначально в нем содержится один отрезок). При каждом исключении может получаться либо 0, либо 1, либо 2 отрезка. Эти отрезки заносятся в третий список. После исключения одного отрезка второго списка изо всех отрезков первого списка, третий список копируется в первый.


                Сортировки. Отсортировать список можно с помощью метода sort():

l.sort()

                В функции сортировки можно задавать функцию, возвращающую ключ сортировки по каждому сортируемому элементу:

def K(v):return –v;

l.sort(key=K)

                В качестве функции, возвращающей ключ, можно использовать lambda-функции:

l.sort(key=(lambda x:-x))

                Аналогично можно использовать функцию сортировки sorted() , возвращающую отсортированный массив. Функцию можно применять не только для списков, но и для кортежей и словарей:

d={1:"one", 2:"two"}; print(sorted(d,key=lambda x:-x))

В любом случае функция возвращает список (в случае словаря – список ключей).

                Кортежи (tuple) полностью аналогичны спискам, за тем исключениям, что их нельзя изменять. Вместо квадратных скобок при задании кортежей используются круглые скобки, или скобки вообще не пишутся.

Преимуществом кортежей над списками является то, что (в отличии от списков) кортежи можно использовать в качестве индексов для словарей. Словари можно рассматривать как аналоги списков, но индексировать их можно не только целыми индексами, но и строками, вещественными числами, кортежами. Простейший способ инициализации словаря: v={key1:value1, key2:value2,…}

Приведем пример программы, в которой задаются два двумерных массива (=две матрицы), распечатываются значения матриц (для этого создается функция распечатывания матрицы), первая матрица умножается на вторую (с помощью созданной функции) и распечатывается результат. Матрицы задаются с помощью словарей, ключами которых являются кортежи из двух элементов.

Здесь используется правило хорошего тона: главная функция оформляется в виде функции main(), которая потом вызывается.

                В словарях можно обращаться к элементам по ключу по аналогии с массивами. Если элемента с данным ключом нет, то выбрасывается исключение. Присваивание значения элементу с заданным ключом добавляет в словарь соответствующую пару (ключначение). Метод get() позволяет получить значение по ключу без выбрасывания исключения (если элемента с данным ключом нет, то метод возвращает None).

                В следующем классическом примере программа выводит количество появлений в файле различных слов, разделенных пробелами:

 

         Простая работа с изображениями.

                Наиболее просто работать с графическими файлами в рамках библиотеки SciPy. С помощью данной библиотеки изображение можно загрузить как список списков списков (= список списков пикселов, где пиксел = список из трех значений RGB). Например, в следующем примере изображение (я использовал изображение 32 бита на пиксел) транспонируется и слегка снижается яркость (по странному алгоритму).

               

 

Стоит отметить, что работоспособность данного примера зависит от версии библиотеки SciPy. По крайней мере, это работает в первой версии библиотеки. Например, в последней версии Python под Windows для работоспособности примера требуется установить (если он не установлен) pip и в командной строке запустить команды

pip install scipy

pip install Pillow

pip install imageio

 

После этого данный код лучше использовать в следующем виде:

 

После установки указанных пакетов старый код тоже будет работать, но с кучей замечаний.