Функции в Python

Функции обозначаются def и могут содержать/не содержать возврат значения return:

def имя_фукнции(аргумент_1, аргумент_2, аргумент_3):
	# Тело фукции
	return значение_1, значение2
 
# Вызов функции в коде
a, b = имя_фукнции(1, 2, 3)

Если функция не содержит return в явном виде, функция будет возвращать None. Некоторые функции можно описать в одну строку с помощью lambda:

имя_фукнции = lambda аргумент_1, аргумент_2: (формула для возвращаемого значения)

Как видно, в Python функции тоже объекты, и их можно записывать как “переменные”.

Списки в Python
  1. Пусть есть список a = [10,20,30,40,50]
    1. a.append(60) добавит элемент в конец [10,20,30,40,50,60]
    2. a.extend([60,70]) расширит список [10,20,30,40,50,60,70]
    3. a.insert(0,-10) добавит элемент в определённое место [-10,10,20,30,40,50]
    4. a.remove(i) удалит элемент с индексом в массиве a
      1. del a[i] аналогично
  2. Условная сортировка через функцию 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() убирает перенос строки из конца строки
Вызов исключений
  1. assert условие вызывает ошибку AssertionError при невыполнении условия
  2. raise имя_исключения специальный вызов ошибки
    1. Можно добавить пояснение: raise имя_исключения("Пояснение")
    2. Без указания имени исключения raise повторно вызывает последнее исключение
  3. Некоторые типы исключений:
    1. IndexError: индекс при обращении к элементу находится вне допустимого диапазона
    2. TypeError: операция / функция применяется к значению недопустимого типа
    3. ValueError: операция / функция получают объект корректного типа с некорректным значением
    4. ZeroDivisionError: деление на ноль
    5. OSError: ошибки системы (невозможно найти файл, память диска заполнена и т.д.)
  4. Обработка ошибок через оператор try:
try:
    # Блок кода с вероятной ошибкой
except:
    # Выполняется при срабатывании любой ошибки
except ValueError:
    # Выполняется при срабатывании ошибки типа ValueError
else:
    # Выполняется, если описанные ошибки не выскочила
finally:
    # Выполняется всегда