- Анонимная функция
lambda
:- Создает небольшую анонимную функцию.
- Синтаксис:
lambda аргументы: выражение
- Возвращает результат
выражения
. - Ограничения: только одно выражение, не может содержать сложные инструкции (циклы,
if
как инструкция,try
, etc.). - Часто используется там, где нужна короткая функция (например, как
key
дляsort()
,sorted()
,min()
,max()
или вmap()
,filter()
). - Пример:
# Эквивалентно def square(x): return x**2 square = lambda x: x**2 print(square(5)) # Вывод: 25 points = [(1, 5), (3, 2), (2, 8)] # Сортировка по второму элементу кортежа points.sort(key=lambda point: point[1]) print(points) # Вывод: [(3, 2), (1, 5), (2, 8)]
- Функция
map()
:map(function, iterable, ...)
- Применяет
function
к каждому элементуiterable
(или несколькимiterable
, еслиfunction
принимает несколько аргументов). - Возвращает итератор (
map object
), содержащий результаты. - Пример 1:
a = ['hello', 'hi', 'good morning'] # Применить str.upper к каждому элементу списка a b_iterator = map(str.upper, a) b_list = list(b_iterator) # Преобразовать итератор в список print(b_list) # Вывод: ['HELLO', 'HI', 'GOOD MORNING']
- Пример 2 (несколько итераторов):
nums1 = [1, 2, 3] nums2 = [4, 5, 6] nums3 = [7, 8, 9] # Сложить соответствующие элементы из трех списков result = map(lambda x, y, z: x + y + z, nums1, nums2, nums3) print(list(result)) # Вывод: [12, 15, 18]
- Функция
filter()
:filter(function, iterable)
- Фильтрует элементы
iterable
, оставляя только те, для которыхfunction
возвращаетTrue
. Еслиfunction
этоNone
, остаются только истинные элементы. - Возвращает итератор (
filter object
). - Пример:
def is_greater_than_10(x): return x > 10 numbers = [14, 0, 5, -79, 645, 7952, 18, 0, -192, 471] # Отфильтровать числа > 10 numbers_gt_10_iterator = filter(is_greater_than_10, numbers) numbers_gt_10_list = list(numbers_gt_10_iterator) print(numbers_gt_10_list) # Вывод: [14, 645, 7952, 18, 471] # Пример с None mixed = [0, 1, '', 'hello', None, True, False] truthy_items = list(filter(None, mixed)) print(truthy_items) # Вывод: [1, 'hello', True]
- Функция
zip()
:zip(*iterables)
- Объединяет элементы из нескольких итерируемых последовательностей в кортежи.
- Возвращает итератор (
zip object
). - Итератор останавливается, когда заканчивается самая короткая из переданных последовательностей.
- Пример 1:
ids = [1, 2, 3, 4] leaders = ['Elon Musk', 'Tim Cook', 'Bill Gates', 'Yang Zhou'] countries = ('Australia', 'USA') # Короче других records_iterator = zip(ids, leaders, countries) records_list = list(records_iterator) print(records_list) # Вывод: [(1, 'Elon Musk', 'Australia'), (2, 'Tim Cook', 'USA')]
- Пример 2 (создание словаря):
employee_numbers = [2, 9, 18] employee_names = ["Valentin", "Leonti", "Andrew"] numbers_to_names = dict(zip(employee_numbers, employee_names)) names_to_numbers = dict(zip(employee_names, employee_numbers)) print(numbers_to_names) # Вывод: {2: 'Valentin', 9: 'Leonti', 18: 'Andrew'} print(names_to_numbers) # Вывод: {'Valentin': 2, 'Leonti': 9, 'Andrew': 18}
zip_longest()
(из модуляitertools
):itertools.zip_longest(*iterables, fillvalue=None)
- Работает как
zip()
, но итерирует до конца самой длинной последовательности, заполняя недостающие значения значениемfillvalue
. - Пример:
from itertools import zip_longest ids = [1, 2, 3, 4] leaders = ['Elon Musk', 'Tim Cook', 'Bill Gates', 'Yang Zhou'] countries = ('Australia', 'USA') records_longest = zip_longest(ids, leaders, countries, fillvalue='Unknown') print(list(records_longest)) # Вывод: # [(1, 'Elon Musk', 'Australia'), # (2, 'Tim Cook', 'USA'), # (3, 'Bill Gates', 'Unknown'), # (4, 'Yang Zhou', 'Unknown')]
- Функция
isinstance()
:isinstance(object, classinfo)
- Проверяет, является ли
object
экземпляром классаclassinfo
или его подкласса. classinfo
может быть одним классом или кортежем классов.- Предпочтительнее, чем прямое сравнение типов с
type()
, так как учитывает наследование. - Пример:
a = [5, 3, 'hello', [3, 4], ' world', [5], 10.5] sum_nums = 0 for i in a: # Проверить, является ли i целым или вещественным числом if isinstance(i, (int, float)): sum_nums += i print(sum_nums) # Вывод: 18.5
- Функции
all()
иany()
:all(iterable)
: ВозвращаетTrue
, если все элементыiterable
истинны (или еслиiterable
пуст).print(all([True, 1, "hello"])) # True print(all([True, 0, "hello"])) # False (из-за 0) print(all([])) # True
any(iterable)
: ВозвращаетTrue
, если хотя бы один элементiterable
истинен. ВозвращаетFalse
, еслиiterable
пуст.print(any([False, 0, "hello"])) # True (из-за "hello") print(any([False, 0, ""])) # False print(any([])) # False ```* **Создание функции (`def`):**
- Синтаксис:
def имя_функции(параметр1, параметр2=значение_по_умолчанию, *args, **kwargs): """Докстринг: Описание того, что делает функция.""" # Тело функции (инструкции) результат = ... return результат # Необязательно, если функция ничего не возвращает (вернет None)
- Вызов:
имя_функции(аргумент1, аргумент2, ...)
илиprint(имя_функции(...))
- Пример:
def factorial(n: int) -> int: """Вычисляет факториал целого неотрицательного числа n.""" if not isinstance(n, int) or n < 0: raise ValueError("Факториал определен только для целых неотрицательных чисел") pr = 1 for i in range(1, n + 1): # Используем range(1, ...) т.к. умножение на 0 не нужно pr *= i return pr # Возвращаем результат, а не печатаем try: print(f"Factorial 3 = {factorial(3)}") # -> 6 print(f"Factorial 5 = {factorial(5)}") # -> 120 print(f"Factorial 0 = {factorial(0)}") # -> 1 # print(f"Factorial -1 = {factorial(-1)}") # Вызовет ValueError except ValueError as e: print(e)
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰