Повторное использование кода; пространства имён, методы объектов
Функции (введение)
- Задача повторного использования кода — макросы и подпрограммы
- Функции в Python
- Функция — это запись алгоритма обработки данных, а не преобразование, как в математике
duck typing
- вызов функции — выражение, всегда есть возвращаемое значение — любой объект (например, None)
- возвращаемое значение можно не использовать
- Определение функции, формальные параметры
простые примеры
- Параметры могут быть какого угодно типа, функция всё равно вызовется
- Если параметры нельзя перемножить друг на друга, произойдёт исключение
Если можно, вернётся результат, тип которого определяется типом выражения a*b*c
Примеры: 1, 2, 3, 1.1, 2.345, 0, "QWE", 2, 4, 3, ["QWE",RTY"], 2
- Локальное пространство имён функции
просто вывод dir()
- независимость имён
locals() и globals(), что они показывают
- порядок просмотра пространств
- автоопределение локальных имён: есть ли связывание в локальном пространстве
global
с этого момента и до конца курса каждые модуль/функция/класс в заданиях должны содержать docstring с пояснением, что они делают
Функция — сумма цифр
Используя предыдущую функцию: ввести последовательность, вывести элемент с минимальной суммой цифр
можно с помощью min() — как?
функция — расстояние между точками ( на самом деле есть )
Ввести список пар вида (1,2), (3,4), (100,100) …, найти самые удалённые точки
- Распаковка и запаковка параметров функций
- ничего и нет, только списки
- Функции с переменным количеством параметров
функция, возвращающая среднее квадратичное своих параметров
Распаковка последовательности при вызове: вместо части позиционных параметров можно передать конструкцию *последовательность
{*}, например, print(*seq) выведет любой список в виде объектов через пробел
функция, возвращающая список только целочисленных из всех параметров
Всё остальное про функции — потом, не сегодня
Методы объектов; модули
- Поля объектов, инкапсуляция
dir(объект)
объект.имя_поля
- методы и … поля
Модули, sys.path
- программа на Python как модуль
- встроенная и в среду Python, и в язык Python документация
help()
- документирование собственного кода
- docstring
object.__doc__
Написать «тупой» модуль, в котором будет один объект-функция и один объект-число, функция должна менять это число. Модуль и функция должны быть документированы
Получившийся help(modul)
Help on module modul: NAME modul DESCRIPTION Just dummy module that provides nothing Variables: Var: dummy variable FUNCTIONS Function(a, b) Set Var to max(2a,3b); return min(3a,2b) DATA Var = 7 FILE /var/home/george/src/modul.py
Строки и их методы
- Строковые методы
все (в т. ч. in)
replace()
Python 3.5.3+ (default, Jun 7 2017, 23:23:48) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> s = "Наш паровоз вперёд летит!" >>> >>> s.replace("паровоз", "самовар") 'Наш самовар вперёд летит!' >>> st = s.replace("паровоз", "самолёт") >>> s 'Наш паровоз вперёд летит!' >>> st 'Наш самолёт вперёд летит!' >>> >>> st.replace("ё", "*") 'Наш самол*т впер*д летит!' >>> # видим, что подменяются _все_ вхождения подстроки
split() и join()
Python 3.5.3+ (default, Jun 7 2017, 23:23:48) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> s = "Наш паровоз вперёд летит!" >>> s.split() ['Наш', 'паровоз', 'вперёд', 'летит!'] >>> s.split('р') ['Наш па', 'овоз впе', 'ёд летит!'] >>> # разделительный символ не попадает в список! >>> >>> s 'Наш паровоз вперёд летит!' >>> # как выясняется, s не изменилась >>> >>> s.split('') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: empty separator >>> s.split('!') ['Наш паровоз вперёд летит', ''] >>> s.split('Н') ['', 'аш паровоз вперёд летит!'] >>> s.split('Z') # а если разделителя в строке нет? ['Наш паровоз вперёд летит!'] >>> sep = '+' >>> sep.join(["Sasha", "Masha"]) 'Sasha+Masha' >>> ', '.join(("Veni", "vidi", "vici")) 'Veni, vidi, vici'
хорошо бы сюда ещё пример с конструктором п-ти строчек -- ArsenyMaslennikov 2017-07-31 03:56:18
Ввести строку, заменить в ней последовательности "-" на один минус
Ввести запрещённое сочетание букв и строку. Вывести строку, в которой запрещённое сочетание букв не встречается
(например, "ab" и "aabbcaabbb" → "cb")
Списки и их методы
- все методы
- стек, суть pop()/push(), эффективность
- очередь и deque()
Функция, возвращающая список всех делителей числа
Функция списка, убирающая из списка подряд идущие одинаковые элементы
Для уверенных в себе: То же, но повторять, пока таких групп не останется.