Функции в Python
Функции обозначаются def
и могут содержать/не содержать возврат значения return
:
def имя_фукнции(аргумент_1, аргумент_2, аргумент_3):
# Тело фукции
return значение_1, значение2
# Вызов функции в коде
a, b = имя_фукнции(1, 2, 3)
Если функция не содержит return
в явном виде, функция будет возвращать None
.
Некоторые функции можно описать в одну строку с помощью lambda
:
имя_фукнции = lambda аргумент_1, аргумент_2: (формула для возвращаемого значения)
Как видно, в Python функции тоже объекты, и их можно записывать как “переменные”.
Списки в Python
- Пусть есть список
a = [10,20,30,40,50]
a.append(60)
добавит элемент в конец[10,20,30,40,50,60]
a.extend([60,70])
расширит список[10,20,30,40,50,60,70]
a.insert(0,-10)
добавит элемент в определённое место[-10,10,20,30,40,50]
a.remove(i)
удалит элемент с индексом в массивеa
del a[i]
аналогично
- Условная сортировка через функцию
sorted()
с ключомkey
:
a = [['a',3], ['b',2], ['c',1]]
b = sorted(a, key = lambda e: e[1])
List comprehension
Автоматическое заполнение массива в 1 строку:
# Без условия
a = [(итеративная формула) for (переменная цикла) in (контейнер)]
# С условием
a = [(итеративная формула) for (переменная цикла) in (контейнер) if (условие переменной цикла)]
Примеры:
a = [i for i in range(5)] # -> [0, 1, 2, 3, 4]
b = [i**2 for i in range(5)] # -> [0, 1, 4, 9, 16]
c = [1 for i in range(5)] # -> [1, 1, 1, 1, 1]
d = [i for i in range(10) if i % 2 == 0] # -> [0, 2, 4, 6, 8]
Разбиение строки ввода на массив из целых чисел:
a = [int(s) for s in input().split()]
Использование list comprehension в заполнении словаря:
a = {i: i**3 for i in range(5)} # -> {0: 0, 1: 1, 2: 8, 3: 27, 4: 64}
Starred expression
Оператор *
“достаёт” внутренность списка, если это есть куда “вложить”:
a = [1,2,3]
b = [a,4,5] # -> [[1,2,3],4,5]
c = [*a,4,5] # -> [1,2,3,4,5]
Работа с файлами
Файл открывается функцией open
; работа с ним проводится через переменную (в нашем случае, f
):
# "r" - read / открыть на чтение
# "w" - write / открыть на запись "заново"
# "a" - appebd / открыть на запись "в дополнение"
f = open("путь/к/файлу.txt", "r")
# Можно сразу прочитать весь файл. После этого работа с ним закончится - в переменной f больше "ничего не будет".
s = f.read()
# В конце, работу с файлом обязательно завершить
f.close()
Чтобы не завершать работу с файлом вручную, можно пользоваться with
:
with open("путь/к/файлу.txt", "r") as f:
s = f.read()
Можно построчно обрабатывать файл, использовав его как контейнер:
with open("путь/к/файлу.txt", "r") as f:
for line in f:
# Здесь, line - строка из f
print(line.strip()) # strip() убирает перенос строки из конца строки
Вызов исключений
assert условие
вызывает ошибку AssertionError при невыполнении условияraise имя_исключения
специальный вызов ошибки- Можно добавить пояснение:
raise имя_исключения("Пояснение")
- Без указания имени исключения
raise
повторно вызывает последнее исключение
- Можно добавить пояснение:
- Некоторые типы исключений:
- IndexError: индекс при обращении к элементу находится вне допустимого диапазона
- TypeError: операция / функция применяется к значению недопустимого типа
- ValueError: операция / функция получают объект корректного типа с некорректным значением
- ZeroDivisionError: деление на ноль
- OSError: ошибки системы (невозможно найти файл, память диска заполнена и т.д.)
- Обработка ошибок через оператор
try
:
try:
# Блок кода с вероятной ошибкой
except:
# Выполняется при срабатывании любой ошибки
except ValueError:
# Выполняется при срабатывании ошибки типа ValueError
else:
# Выполняется, если описанные ошибки не выскочила
finally:
# Выполняется всегда