На главную страницу | Новости | Ссылки | Контакты
Базовые конструкции языка Python: Типы данных, операции, множества и списки, функции, ввод-вывод и работа с файлами (кратко).
Простейшая программа на языке Python не требуется подключения каких-либо библиотек, заголовочных файлов и даже использования функции Main() как в C++:
#code: Первая программа на языке Python
print('Hello World!')
Посколку Python - язык интерпретируемый, то такая программа называется сценарием или
Мы используем версию Python3. Поэтому запуск данного скрипта на выполнение осуществляется следующим образом:
python3 prog.py
Hello World!
Если в консоли набрать
Комментарии могут быть добавлены в текст программы после символа \#:
print('Hello World!') # это комментарий
Инструкции в Python заканчиваются переводом строки. При этом нет необходимости ставить точку с запятой (как, например, в C++), хотя ее постановка не будет ошибкой. Точка с запятой используется, если возникает необходимость разместить несколько инструкций в одной строке, например
>>> x = 2; y = 3; print(x+y)
5
Python --- язык со строгой динамической типизацией. Строгая типизация означает, что переменная в любой момент времени имеет точно определенный тип. В языке Python тип переменной легко определить с помощью функции
#code: Строгая динамическая типизация
>>> X = 10
>>> type(X)
>>> X = 'Hello'
>>> type(X)
Здесь знак <<равно>> (
К основным встроенныем типам данных языка Python относятся числа, строки, множества, списки, кортежи и словари. Рассмотрим их подробнее (в скобках будет указан тип данных, возвращаемый функцией
- Числовые типы, которые включают целые (
- Строка (
- Множество (
- Список (
- Кортежь (
- Словарь (
- Логический тип (
В Python все типы данных реализованы в виде объектов, причем для них наиболее важные операторы уже перегружены. Поэтому работат с базовыми типами можно двумя способами: либо посредством вызова методов объектов, либо использовать перегруженные операторы.
Продемонстрируем сказанное на примере класса
>>> 2+3
5
может быть записан в эквивалентном виде с использованием метода
>>> (2).__add__(3)
5
Но, конечно, так никто не пишет.
Узнать полный список методов любого класса можно посредством функции
>>> dir(int)
Для получения более детальной справки о классе и его методах используйте функцию
>>> help(int)
>>> help(int.__add__)
Среди полезных возможностей Python следует отметим возможность работы с комплексными числами. Мнимая единица задается как
>>> 1j*1j
(-1+0j)
Кроме того, существует модуль
%Однако его здесь рассматривать не будем. Вместо этого перейдем к обзору более сложных типов данных и операций над ними.
Списки в Python --- это аналог массивов из других языков программирования. Поэтому они используются довольно часто. Списки в Python задаются в виде последовательности элементов, перечисленных через запятую и заключенных в квадратные скобки с обоих сторон. При этом элементы списка могут иметь любой тип (не обязательно одинаковый), в частности, они могут быть тоже списками. Рассмотрим некоторые часто используемые операции над списками.
Получить элемент списка можно, указав его номер в квадратных скобках после имени списка:
L = [1, 2, 'A', True, [3, 4]]
>>> L[0] # первый элемента списка
1
>>> L[4][0] # извлекаем элемент вложенного списка
3
Заметим, что нумерация элементов списка в Python начинается с нуля.
Выполнить конкатенацию (объединение) двух списков можно с помощью перегруженного оператора
>>> [1, 2] + [5, 6]
[1, 2, 5, 6]
Кроме того, класс
Например, метод
>>> L = [1, 2]
>>> L.insert(1, 3)
>>> L
[1, 3, 2]
Узнать длину списка можно с помощью функции
>>> len([1,2,3])
3
Сделаем важное замечание относительно операция присваивания
>>> L = [1, 2, 3]
>>> S = L
>>> L[0] = 9 # изменим первый элемент списка L
>>> L
[9, 2, 3]
>>> S # в списке S первый элемент тоже изменился
[9, 2, 3] # так как это один и тот же список на самом деле
Если же нам нужно сделать реальную копию списка, то для этих целей существует метод
>>> L = [1, 2, 3]
>>> S = L.copy()
>>> L[0] = 9
>>> L
[9, 2, 3]
>>> S # теперь все в порядка
[1, 2, 3] # список S не затронут
Это замечание справедливо и для всех остальных встроенных типов данных языка Python. В общем случае для операции присваивания действуют следующие правила:
--- Инструкция присваивания всегда создает ссылку на объект (но не создает копии объектов).
--- Переменные создаются при первом присваивании.
--- Перед использованием переменной ей должно быть присвоено значение.
В отличие от списков, множества не могут содержать повторяющихся элементов.
Для работы с множествами предусмотрены методы union(), intersection(), difference(), issubset(), смысл которых ясен из их названия. Посмотрим, как это выглядит на практике.
>>> A = {1, 2}
>>> B = {2, 3}
>>> A.union(B)
{1, 2, 3}
>>> A.intersection(B)
{2}
Эти же операции можно записать в более компактной форме, используя перегруженные операторы:
>>> A | B # объединение множеств
{1, 2, 3}
>>> A & B # пересечение множеств
{2}
%Заметим, что этот способ компактнее и нагляднее. Обозначения этих теоретико-множественных операций совпадают с соответствующими операциями над булевыми типами (что не должно удивлять).
Также имеются операции нахождения разности множеств (
Кроме того, существуют операции над множествами, которые возвращают логическое значение истина или ложь. К ним относится операция сравнения двух множеств (
Мощность множества
Строки в Python --- это не просто массив символов. В Python строки реализованы в виде отдельного класса. Однако операции над строками очень похожи на операции над списками. Например, конкатенация строк (оператор
#code: Работа с строками
>>> s = 'str'+'ing' # конкатенация
>>> s
'string'
>>> s[2]
'r'
>>> t = s*2 # удвоение строки
>>> t
'stringstring'
>>> len(t)
12
Получение подстроки. Оператор извлечения среза из строки выглядит так: [X:Y]. X --- это индекс начала среза, а Y --- его окончания; причем символ с номером Y в срез уже не входит. Если отсутствует первый индекс, то срез берется от начала до второго индекса; при отсутствии второго индекса, срез берется от первого индекса до конца строки.
>>> s = "0123456789";
>>> s[0:2];
'01'
>>> s[:2];
'01'
>>> s[2:];
'23456789'
%Операторы сравнения обычно используются для сравнения числовых выражений, но в Python они могут применяться и к другим типам данных, например, к множествам, о чем уже было сказано выше.
Операторы сравнения производят сравнение двух элементов одного класса и в качестве результата возвращают константы True или False. Основные операторы сравнения: равно (
>>> 5 <= 3
False
Кроме того, операторы сравнения перегружены для некоторых других (не числовых) классов. Например, как уже было отмечено выше, применительно к множествам операторы
>>> {1,2,3} > {1,3}
True
Для переменных логического типа
>>> (not 1==2) or False
True
Язык Python допускает неявное преобразование типов. Например, если сложить целое (int) и вещественное (float) числа, то результатом будет число типа
>>> type(3 + 4.5)
Явное преобразование из одного типа в другой имеет следующую форму:
>>> float('12'+'3')
123.0
Еще один полезный пример --- преобразования строки в список символов:
#code: Преобразование строки в список символов
>>> ls = list('string')
>>> ls
['s', 't', 'r', 'i', 'n', 'g']
% это можно опустить:
Правда, в обратную сторону этот способ (через
>>> str(ls)
"['s', 't', 'r', 'i', 'n', 'g']"
Для получения исходной строки нужно использовать специальный метод
>>> ''.join(ls)
'string'
Оператор ветвления представлен единственной условной инструкцией
if 1 > 2:
print('условие выполнено')
В Python отсутствует оператор множественного выбора (switch -- case) как в C++ или JAVA. Для этих целей используется полная конструкция
if <условие1>:
<блок1>
elif <условие2>:
<блок2>
else <условие3>:
<блок3>
Для реализации циклов в Python присутствуют стандартные инструкции
for x in {3, 2, 1}:
print(x)
Стандартная форма цикла
while <условие>:
<блок>
Совместно с инструкциями циклов могут использоваться стандартные инструкции
Сделаем сразу замечание относительно выделения блоков кода. В отличие от многих других языков программирования, в Python отсутствуют какие-либо ключевые слова или конструкции для выделения блока (как, например, begin...end в языке Паскале или фигурные скобки в C++). Вместо этого используются горизонтальные отступы для того, чтобы дать понять интерпретатору, где заканчивается данный блок. Например,
for x in [1, 2]:
print(x)
print(x^2)
print(x^3)
В этом примере 2-ая и 3-я строки кода включены в тело цикла for и поэтому будут выполнены дважды (для x=1 и x=2), а инструкция 4-ой строки расположена после окончания цикла, и значит выполнится только один раз (для x=2).
Для формирования последовательностей чисел с заданным шагом существует функция \\
где i --- целое неотрицательное число. Например,
>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]
Функция range часто используется в циклах. Например, следующий код напечатает в консоль последовательность чисел 0, 2, 4, 6, 8.
for x in range(0, 10, 2):
print(x)
Кроме того,
>>> [x**2 for x in range(0, 10, 2)]
[0, 4, 16, 36, 64]
Как и в большинстве языков программирования, в Python можно определять собственные функции. Для создания функции предназначена5 инструкция
#code: Пример объявления функции
def sum(x,y):
return x+y
По умолчанию все переменные внутри функции локальные, т.е. находится в локальной области видимости. Это вполне естественный подход. Однако есть возможность обратиться и к глобальным переменным, объявленным вне функции. Для этого имеются ключевые слова
Еще одни способ задания функций --- использование лямбда-нотации:
>>> sum = lambda x,y: x+y
>>> sum(2,3)
5
Или даже так, без присвоения имени функции:
>>> (lambda x,y: x+y)(2,3)
5
Такие анонимные (или лямбда-функции) составляют основу функционального программирования.
Для считывания строки с консоли используется функция
>>> str = input() # ввод строки с консоли
5
>>> x = int(str) # преобразование в числовую форму
>>> y = x**2
>>> print(y) # вывод на консоль
25
Чтение/запись данных из файла можно проводить с помощью методов
>>> f = open('newfile.txt','w') # открытие в режиме записи
>>> f.write('Hello')
5
>>> f.close()
>>> f = open('newfile.txt','r') # открытие в режиме чтения
>>> f.read()
'Hello'
>>> f.close()