3.97M
Категория: ПрограммированиеПрограммирование

Основы Python. Практическое занятие №2

1.

Практическое занятие №2
Основы Python

2.

СОДЕРЖАНИЕ
- Функции
- Модульное программирование
- Файловый ввод/вывод
- Работа с контекстным менеджером
- Cериализация объектов

3.

Функции в Python. Основные определения.
Функция — это группа инструкций, которая существует внутри программы с целью выполнения
определенной задачи.
Виды функций:
функция без возврата значения - просто исполняет содержащиеся в ней инструкции и затем завершается.
функция с возвратом значения - исполняет содержащиеся в ней инструкции и возвращает значение в ту
инструкцию, которая ее вызвала.
Назначение имени функции:
1) Имена функциям назначаются точно так же, как назначаются имена используемым в программе переменным.
2) Имя функции должно быть достаточно описательным, чтобы любой читающий ваш код мог обоснованно
догадаться, что именно функция делает.
Python требует, чтобы соблюдались такие же правила, которые соблюдаются при именовании переменных:
♦ в качестве имени функции нельзя использовать одно из ключевых слов Python;
♦ имя функции не может содержать пробелы;
♦ первый символ должен быть одной из букв от а до z, от А до Z либо символом подчеркивания (_);
♦ после первого символа можно использовать буквы от а до z или от А до Z, цифры от О до 9 либо символы
подчеркивания;
♦ символы в верхнем и нижнем регистрах различаются.

4.

Преимущества применения функций
- Более простой код. Когда код программы разбит на функции, он проще и легче для понимания. Несколько
небольших функций намного легче читать, чем одну длинную последовательность инструкций.
- Повторное использование кода. Функции также уменьшают дублирование программного кода в программе. Если
определенная операция в программе выполняется в нескольких местах, то для выполнения этой операции можно один
раз написать функцию и затем ее исполнять в любое время, когда она понадобится.
- Более простое тестирование. Когда каждая задача в программе содержится в собственной функции, процессы
тестирования и отладки становятся проще. Программисты могут индивидуально протестировать каждую функцию в
программе и определить, выполняет ли она свою задачу правильно. Это упрощает процесс изолирования и исправления
ошибок.
- Более быстрая разработка. Предположим, что программист или команда программистов разрабатывают
многочисленные программы. Они обнаруживают, что каждая программа выполняет несколько общих задач, таких как
выяснение имени пользователя и пароля, вывод текущего времени и т. д. Многократно писать программный код для
всех этих задач не имеет никакого смысла. Вместо этого для часто встречающихся задач пишут функции, и эти
функции могут быть включены в состав любой программы, которая в них нуждается.
- Упрощение командной работы. Функции также упрощают программистам работу в командах. Когда программа
разрабатывается как набор функций, каждая из которых выполняет отдельную задачу, в этом случае разным
программистам может быть поручено написание различных функций.

5.

Определение и вызов функции (процедуры)
Для того чтобы создать функцию, пишут ее определение. Вот общий формат определения функции в Python:
def имя_ функции() :
инструкция
инструкция
Первая строка называется заголовком функции. Он отмечает начало определения функции. Заголовок функции
начинается с ключевого слова def, после которого идет имя_функции, затем круглые скобки и потом двоеточие.
- Начиная со следующей строки идет набор инструкций, который называется блоком.
- Блок — это просто набор инструкций, которые составляют одно целое.
- Эти инструкции исполняются всякий раз, когда функция вызывается.
- Все инструкции в блоке выделены отступом для того, чтобы интерпретатор Python использовал их для
определения начала и конца блока.
Определение функции говорит о том, что именно функция делает, но оно не исполняет функцию. Для того
чтобы функцию исполнить, ее необходимо вызвать:
имя_ функции()

6.

Определение и вызов функции
1# Эта программа демонстрирует функцию.
2# Сначала мы определяем функцию с именем message.
3 def message():
4
print('Я - Артур,')
5
print('король британцев. ')
6 # Вызвать функцию message.
7 message()
Вывод программы:
Я - Артур,
король британцев.

7.

Функции в Python
Объявление

8.

9.

Именованные аргументы

10.

11.

Переменное число аргументов
Объявление функции с переменным числом аргументов
Переданные аргументы будут собраны в кортеж
Объявление функции с переменным числом аргументов
и одним позиционным (некорректная форма записи)
Объявление функции с переменным числом аргументов
и одним позиционным (корректная форма записи)
Объявление функции с переменным числом именованных
аргументов

12.

13.

14.

Имя функции в качестве переменной
X0, y1, y2

15.

16.

Область видимости имен

17.

Модульное программирование

18.

Поиск модулей транслятором

19.

Модульное программирование
import name_module
Создание модуля с функцией
Загрузка модуля с функцией в Colab

20.

21.

Импорт нескольких модулей

22.

Импорт выбранных имен из модуля

23.

Импорт всех имен из модуля

24.

Псевдонимы модулей

25.

26.

Введение в файловый ввод и вывод
Большинство коммерческих пакетов программного обеспечения, используемых ежедневно, хранят данные в
файлах.
♦Текстовые процессоры. Программы обработки текста служат для написания писем, записок, отчетов и других
документов. Документы сохраняются в файлах, чтобы их можно было редактировать и распечатывать.
♦Графические редакторы. Программы редактирования изображений используются для создания графиков и
редактирования изображений, в частности тех, которые вы снимаете цифровой камерой. Создаваемые или
редактируемые графическим редактором изображения сохраняются в файлах.
♦Электронные таблицы. Программы обработки электронных таблиц применяются для работы с числовыми
данными. Числа и математические формулы могут вставляться в ячейки электронной таблицы. Затем
электронная таблица может быть сохранена в файле для дальнейшего использования.
♦Игры. Многие компьютерные игры содержат данные в файлах. Например, некоторые игры хранят в файле
список имен игроков с их очками. Эти игры, как правило, показывают имена игроков в порядке возрастания
количества их очков с наибольшего до наименьшего. Некоторые игры также позволяют сохранять в файле
текущее состояние игры, чтобы можно было выйти из игры и потом продолжить игру без необходимости
начинать с начала.
♦Веб-браузеры. Иногда при посещении веб-страницы браузер хранит на компьютере небольшой файл, так
называемый файл cookie. Cookie-файлы, как правило, содержат информацию о сеансе просмотра, такую как
содержимое корзины с покупками.

27.

Введение в файловый ввод и вывод
Когда в программе используется файл, всегда требуется выполнить три шага.
1 Открыть файл.
В процессе открытия файла создается связь между файлом и программой. Открытие файла вывода
обычно создает файл на диске и позволяет программе записать в него данные. Открытие файла ввода
позволяет программе прочитать данные из файла.
2 Обработать файл.
На этом шаге данные либо записываются в файл (если это файл вывода), либо считываются из файла
(если это файл ввода).
3 Закрыть файл.
Когда программа закончила использовать файл, его нужно закрыть. Эта операция разрывает связь
файла с программой.

28.

Файловый объект
Файловый объект — это программный объект, который связан с определенным файлом и предоставляет
программе методы для работы с этим файлом. В программе на файловый объект ссылается переменная. Она
используется для осуществления любых операций, которые выполняются с файлом

29.

Введение в файловый ввод и вывод
Типы файлов
Текстовый файл содержит данные,
которые были закодированы в виде текста
при помощи такой схемы кодирования, как
ASCII или Юникод. Даже если файл
содержит числа, эти числа в файле хранятся
как набор символов. В результате файл
можно открыть и просмотреть в текстовом
редакторе, таком как Блокнот.
Двоичный файл содержит данные, которые
не были преобразованы в текст. Данные,
которые помещены в двоичный файл,
предназначены только для чтения
программой, и значит, такой файл
невозможно просмотреть в текстовом
редакторе.

30.

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

31.

Открытие файла
В Python функция open применяется для открытия файла. Она создает файловый объект и связывает его с файлом
на диске. Вот общий формат применения функции open:
файловая_переменная = open (имя_файла, режим)
Здесь: файловая_переменная— это имя переменной, которая ссылается на файловый объект;
имя_файла — это строковый литерал, задающий имя файла;
режим— это строковый литерал, задающий режим доступа (чтение, запись и т. д.), в котором файл будет
открыт.

32.

Список режимов доступа к файлу в Python
r
rb
r+
rb+
w
wb
w+
wb+
a
ab
a+
ab+
Открывает файл только для чтения. Указатель стоит в начале файла.
Открывает файл для чтения в двоичном формате. Указатель стоит в начале файла.
Открывает файл для чтения и записи. Указатель стоит в начале файла.
Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла.
Открывает файл только для записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если
такового не существует.
Открывает файл для записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем имя_файла,
если такового не существует.
Открывает файл для чтения и записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового
не существует.
Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем
имя_файла, если такового не существует.
Открывает файл для добавления информации в файл. Указатель стоит в конце файла. Создает файл с именем
имя_файла, если такового не существует.
Открывает файл для добавления в двоичном формате. Указатель стоит в конце файла. Создает файл с именем имя_файла,
если такового не существует.
Открывает файл для добавления и чтения. Указатель стоит в конце файла. Создает файл с именем имя_файла, если
такового не существует.
Открывает файл для добавления и чтения в двоичном формате. Указатель стоит в конце файла. Создает файл с именем
имя_файла, если такового не существует.

33.

Указание места расположения файла
Когда в функцию open передается имя файла, которое в качестве аргумента не содержит путь,
интерпретатор Python исходит из предположения, что место расположения файла такое же, что и у
программы.
test_file = open(‘test.txt’, ‘w’)
Если указать путь в строковом литерале (в особенности на компьютере Windows), следует снабдить
строковый литерал префиксом в виде буквы r.
test_file = open(r’C:\Users\temp\test.txt’, ‘w’)
Префикс r указывает на то, что строковый литерал является неформатированным. В результате этого
интерпретатор Python рассматривает символы обратной косой черты как обычные символы. Без
префикса r интерпретатор предположит, что символы обратной косой черты являются частью
экранированных последовательностей, и произойдет ошибка.

34.

Экранированные последовательности
Экранированные последовательности — это последовательности, которые начинаются с
символа "\" за которым следует один или более символов.
Для полноценного представления структуры текста или его специфики нужны какие-то особые символы.
Некоторые символы должны управлять курсором (еще называют "кареткой" – отголосок из прошлого от
печатных машинок). Еще нужны какие-то символы с помощью которых можно выполнять какие-нибудь
служебные задачи, например, обозначать шестнадцатеричные или восьмеричные коды символов. Для таких
целей и существуют экранированные последовательности.
>>> s = 'слово_1\nслово_2\nслово_3'
>>>
>>> print(s) # вывод с помощью функции print()
слово_1
слово_2
слово_3
Функция print() осуществила вывод – в тех местах, где
были последовательности '\n' она выполнила переносы
строк.
'\n' – это экранированная последовательность.
Такие
последовательности
воспринимаются
интерпретатором как единственный символ.

35.

Таблица последовательностей
Последовательность
Назначение
\newline
\\
\'
\"
\a
\b
\f
Если после символа "\" сразу нажать клавишу Enter то это позволит продолжать запись с новой строки.
Позволяет записать символ обратного слеша.
Позволяет записать один символ апострофа.
Позволяет записать один символ кавычки.
Гудок встроенного в систему динамика.
Backspace, он же возврат, он же "пробел назад" – удаляет один символ перед курсором.
Разрыв страницы.
\n
\r
\t
\v
\xhh
\ooo
\0
\N{id}
\uhhhh
\Uhhhhhhhh
\other
Перенос строки (новая строка).
Возврат курсора в начало строки.
Горизонтальный отступ слева от начала строки (горизонтальная табуляция).
Вертикальный отступ сверху (вертикальная табуляция).
Шестнадцатеричный код символа (две шестнадцатеричные цифры hh).
Восьмеричный код символа (три восьмеричные цифры ooo).
Символ Null.
ID (идентификатор) символа в базе данных Юникода, или, проще говоря, его название в таблице Юникода.
Шестнадцатеричный код 16-битного символа Юникода (символ кодируемый двумя байтами).
Шестнадцатеричный код 32-битного символа Юникода (символ кодируемый четырьмя байтами).
Под other понимается любая другая последовательность символов. Не является экранированной
последовательностью (остается без изменений с сохранением в строке символа "\").

36.

Пример экранирования последовательностей

37.

Запись данных в файл
Метод — это функция, которая принадлежит объекту и выполняет некоторую операцию с использованием
этого объекта. После открытия файла для выполнения операций с файлом используются методы файлового
объекта.
Метод write () применяется для записи данных в файл. Вот общий формат вызова метода write ():
файловая_переменная.write (строковое_значение)
В данном формате:
файловая_переменная— это переменная, которая ссылается на файловый объект,
строковое_значение — символьная последовательность, которая будет записана в файл. Файл должен
быть открыт для записи.

38.

Чтение данных из файла
file.read([size])
file - файловая_переменная
size - int, количество байтов
1) Если файл был открыт для чтения (с помощью режима ‘r’), то для чтения всего его содержимого в
оперативную память применяют метод файлового объекта read().
При вызове метода read() он возвращает содержимое файла в качестве строкового значения.
user_file = open('/content/sample_data/text.txt', 'r')
in_file = user_file.read()
print(in_file)
2) Для чтения строкового значения из файла применяется метод readline().
Строка файла представляет собой символьную последовательность, завершающуюся символом \n.
Этот метод возвращает строку файла как символьную последовательность, включая \n.
user_file = open('/content/sample_data/text.txt', 'r')
in_file = user_file.readline()
print(in_file)
in_file = user_file.readline()
print(in_file)
user_file.close()

39.

Запись и чтение числовых данных
Строковые значения могут записываться в файл непосредственно методом write(), однако числа перед их
записью должны быть преобразованы в строковый тип.
Python имеет встроенную функцию str(), которая преобразует значение в строковый тип.
outfile.write(str(numl) + '\n')
При чтении чисел из текстового файла они всегда читаются как строковые значения.
Встроенная функция int() конвертирует значение со строковым типом в целочисленный.
Встроенная функция float() преобразует значение со строковым типом в вещественный.
infile = open('numbers.txt', 'r')
string_input = infile.readline()
value = int(string_input)
infile.close()

40.

Применение цикла while для чтения файла
Часто программа должна читать содержимое файла, не зная количества хранящихся в файле значений.
Это создает проблему, в случае если требуется написать программу, которая обрабатывает все
значения в файле, сколько бы их ни было.
Для того чтобы прочитать значения в файле, можно применить цикл, но при этом требуется способ
узнать, когда будет достигнут конец файла.
В Python метод readlineO возвращает пустое строковое значение (''), когда он пытается прочитать за
пределами конца файла. Это позволяет написать цикл while, который определяет, когда был достигнут
конец файла. Вот обобщенный алгоритм в псевдокоде:
Открыть файл.
Применить readline, чтобы прочитать первую строку файла.
До тех пор, пока возвращаемое из readline значение не является пустым:
Обработать значение, которое только что было прочитано из файла.
Применить readline, чтобы читать следующую строку файла.
Закрыть файл.

41.

Пример кода для while
# Открыть файл text.txt для чтения.
user_file = open('/content/sample_data/text.txt', 'r')
# Прочитать первую строку из файла, но
# пока не конвертировать в число. Сначала нужно
# выполнить проверку на пустое строковое значение.
in_file = user_file.readline()
s = 0
# Продолжать обработку до тех пор, пока из readline
# не будет возвращена пустая строка.
while in_file != '':
# Вывести строку на экран
print(in_file.rstrip('\n'))
# Конвертировать строку в целое число и прибавить к сумме.
s += int(in_file)
# Прочитать следующую строку.
in_file = user_file.readline()
print(s)
# Закрыть файл.
user_file.close()

42.

Применение цикла for для чтения файла
Язык Python позволяет писать цикл for, автоматически читающий строки в файле без проверки какого-либо
особого условия, которое сигнализирует о конце файла.
Этот цикл не требует операции первичного чтения и автоматически останавливается, когда достигнут конец
файла.
Вот общий формат такого цикла:
for переменная in файловый_объект:
инструкция
инструкция
В данном формате переменная — это имя переменной, файловый_объект— это переменная, которая
ссылается на файловый объект. Данный цикл будет выполнять одну итерацию для каждой строки в файле.
Во время первой итерации цикла переменная будет ссылаться на первую строку в файле (как на символьную
последовательность), во время второй итерации она будет ссылаться на вторую строку и т. д.

43.

Пример кода для for
# Открыть файл text.txt для чтения.
user_file = open('/content/sample_data/text.txt', 'r')
s = 0
# Прочитать все строки из файла
for line in user_file:
# Вывести строку на экран
print(line.rstrip('\n'))
# Конвертировать строку в целое число и прибавить к сумме.
s += int(line)
print(s)
# Закрыть файл.
user_file.close()

44.

Прямой доступ в файл

45.

Перемещение по файлу
seek () устанавливает текущую позицию файла в смещении.
fileObject.seek(offset[, whence])
fileObject – идентификатор файла,
offset - это положение указателя чтения / записи в файле
whence является необязательным и по умолчанию равен -00 - абсолютное позиционирование файла,
1 - поиск относительно текущей позиции,
2 - поиск относительно конца файла.
Функция tell() возвращает текущую
позицию файла.

46.

Работа с контекстным менеджером
Задача состоит в следующем: записать в файл file.txt строку hello.
Самый простой способ ее решить – это воспользоваться функцией open() для открытия файла и
записать в него данные через функцию write(). При этом нужно не забыть освободить ресурс, вызвав
функцию close().
f = open(‘file.txt’, ‘w’)
f.write(‘hello’)
f.close()
Если в процессе работы с файлом (запись, чтение), произошло исключение, то функция close() не
будет вызвана, что влечет за собой возможную потерю данных. Для решения этого вопроса
воспользуемся обработкой исключения:
f = open('file.txt', 'w')
try:
f.write('hello')
except:
print('Some error!')
finally:
f.close()

47.

Работа с контекстным менеджером
Для того, чтобы не писать дополнительный код, связанный с обработкой исключений (это неудобно и
об этом можно забыть), можно воспользоваться конструкцией with… as:
with open('file.txt', 'w') as f:
f.write('hello')
Такая конструкция позволяет автоматически захватить ресурс (в данном случае файл), выполнить
нужный набор операций (запись данных), а перед выходом – освободить ресурс.

48.

Cериализация объектов Python (Pickle)
Процесс сериализации – это способ преобразования структуры данных в линейную форму, которая может
храниться или передаваться по сети.
Модуль pickle реализует мощный алгоритм сериализации и десериализации объектов Python
"Pickling" - процесс преобразования объекта Python в поток байтов, а "unpickling" - обратная операция, в
результате которой поток байтов преобразуется обратно в Python-объект.
import pickle
data = 'dljfjldjlsgglfsgf'
data = ['e', 'd', 'f', 'r']
data = {'e': 34, 'd': 56, 'f': 78, 'r': 56}
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
with open('data.pickle', 'rb') as f:
data_new = pickle.load(f)
print(data_new)
{'e': 34, 'd': 56, 'f': 78, 'r': 56}
import pickle
data = {'e': 34, 'd': 56, 'f': 78, 'r': 56}
serialized_data = pickle.dumps(data)
print(serialized_data)
deserialized_data =
pickle.loads(serialized_data)
print(deserialized_data)
b'\x80\x04\x95\x1d\x00\x00\x00\x00\x00\x00\x00}\x94
\x8c\x01e\x94K"\x8c\x01d\x94K8\x8c\x01f\x94KN\x8c\x
1r\x94K8u.'
{'e': 34, 'd': 56, 'f': 78, 'r': 56}

49.

Cериализация объектов Python (JSON)
import json
JSON (JavaScript Object Notation) - простой
data = 'dljfjldjlsgglfsgf'
формат обмена данными, основанный на
data = ['e', 'd', 'f', 'r']
подмножестве синтаксиса JavaScript.
data = {'e': 34, 'd': 56, 'f': 78, 'r': 56}
with open('data.pickle', 'w') as f:
Модуль json позволяет кодировать и
json.dump(data, f)
декодировать данные в текстовом формате.
with open('data.pickle', 'r') as f:
data_new = json.load(f)
print(data_new)
dljfjldjlsgglfsgf
"dljfjldjlsgglfsgf"
serialized_data = json.dumps(data)
dljfjldjlsgglfsgf
print(serialized_data)
deserialized_data =
json.loads(serialized_data)
print(deserialized_data)
['e', 'd', 'f', 'r']
["e", "d", "f", "r"]
['e', 'd', 'f', 'r']
{'e': 34, 'd': 56, 'f': 78, 'r': 56}
{"e": 34, "d": 56, "f": 78, "r": 56}
{'e': 34, 'd': 56, 'f': 78, 'r': 56}

50.

Задачи для выполнения
1.
Напишите функцию, которая для переданных 100 случайных чисел подсчитывает количество четных и нечетных случайных чисел.
2. Создать функцию, в которую передается неопределенное число целочисленных параметров: два или три. Данная функция должна
определить сумму значений вводимых параметров.
3. Создать файл fun.py, в котором находится программа, вычисляющая количество слов в строке. Воспользоваться данным файлом для
определения числа слов во вводимой с клавиатуры строке.
4. Создать функцию с именованными аргументами, которая вычисляет минимальную сумму элементов списка. Списков в функцию может
передаваться разное количество.
5. Среднее арифметическое чисел. Допустим, что файл с рядом целых чисел называется numbers.txt и существует на диске компьютера.
Напишите программу, которая вычисляет среднее арифметическое всех хранящихся в файле чисел.
6. Создать модуль, который обрабатывает текст из текстового файла. Он создает словарь с ключами – число букв в слове, значение – количество
слов в тексте с таким количеством букв. Результат записывается в текстовый файл.
English     Русский Правила