Функции встроенные в Python: применение и особенности

Раздел: Python -> Функции и процедуры

В языке Python существует множество встроенных функций, доступных без импорта дополнительных модулей. Они обеспечивают базовые операции: от вывода информации до сложной обработки последовательностей. Ниже рассмотрены наиболее полезные из них, включая их комбинированное применение.

Основные стандартные функции и их комбинации

Как эффективно обработать список чисел: отфильтровать чётные, возвести в квадрат и отсортировать по убыванию?

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = sorted(map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers)), reverse=True)
print(result)

стандартные функции языка python (стандартные функции python)

[100, 64, 36, 16, 4]

В этом примере используются три встроенные функции: filter отбирает чётные числа, map возводит их в квадрат, а sorted с параметром reverse=True сортирует по убыванию. Такой подход компактен и читаем.

Типичные ошибки: забыть преобразовать результат map или filter в список (в Python 3 они возвращают итераторы). При необходимости многократного использования следует обернуть в list().

Как узнать длину строки или другого контейнера?

text = "Привет, мир!"
print(len(text))
data = [1, 2, 3, 4, 5]
print(len(data))
empty_dict = {}
print(len(empty_dict))
12
5
0

Функция len возвращает количество элементов. Она работает для всех типов, поддерживающих протокол __len__.

Типичные ошибки: попытка применить len к генератору или итератору, у которых длина не определена (вызовет TypeError). Для получения длины итератора его сначала нужно преобразовать в список.

Как перебрать элементы с индексами без ручного счётчика?

fruits = ["яблоко", "банан", "киви"]
for index, fruit in enumerate(fruits):
    print(index, fruit)
# также с начальным индексом
for i, f in enumerate(fruits, start=1):
    print(i, f)
0 яблоко
1 банан
2 киви
1 яблоко
2 банан
3 киви

enumerate возвращает пары (индекс, элемент). Функция range полезна для генерации числовых последовательностей, например range(10) создаёт числа от 0 до 9.

Типичные ошибки: забыть, что range не включает верхнюю границу. Также enumerate возвращает итератор, поэтому его можно обойти только один раз.

Как проверить, что все элементы последовательности удовлетворяют условию?

nums = [2, 4, 6, 8]
print(all(x % 2 == 0 for x in nums))  # все чётные?
nums2 = [2, 3, 6]
print(any(x % 2 == 0 for x in nums2)) # хотя бы один чётный?
True
True

all возвращает True, если все элементы итератора истинны (в логическом контексте). any возвращает True, если хотя бы один элемент истинен. Часто используются с генераторными выражениями для краткой проверки.

Типичные ошибки: передать пустой итератор: all([]) вернёт True, any([]) вернёт False. Это важно учитывать в логике.

Как преобразовать строку с числами в список целых чисел?

str_numbers = "1 2 3 4 5"
int_list = list(map(int, str_numbers.split()))
print(int_list)
[1, 2, 3, 4, 5]

map применяет функцию int к каждому элементу, полученному после split(). Обёртка list() материализует итератор.

Типичные ошибки: если в строке встречаются нечисловые символы, int вызовет ValueError. Следует предусмотреть обработку ошибок или использовать try/except.

Как объединить списки в словарь, используя ключи и значения из разных списков?

keys = ["a", "b", "c"]
values = [1, 2, 3]
d = dict(zip(keys, values))
print(d)
{'a': 1, 'b': 2, 'c': 3}

zip собирает элементы из нескольких итераторов в кортежи, а dict преобразует пары ключ-значение в словарь.

Типичные ошибки: если списки разной длины, zip обрежет до самого короткого. Для сохранения всех элементов используйте itertools.zip_longest.

Как динамически обратиться к атрибуту объекта по его имени?

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("Анна", 30)
attr_name = "name"
print(getattr(p, attr_name))
# установка атрибута
setattr(p, "city", "Москва")
print(hasattr(p, "city"))
Анна
True

getattr получает значение атрибута, setattr устанавливает, hasattr проверяет существование. Это удобно для метапрограммирования.

Типичные ошибки: если атрибут не существует, getattr по умолчанию выбрасывает AttributeError. Можно указать значение по умолчанию: getattr(obj, attr, default).

Расширенные примеры использования встроенных функций

Пример 1. Функция map с несколькими итераторами.

Пример
a = [1, 2, 3]
b = [10, 20, 30]
c = [100, 200, 300]
result = list(map(lambda x, y, z: x + y + z, a, b, c))
print(result)
[111, 222, 333]

map принимает несколько итераторов и передаёт соответствующие элементы в функцию. Остановка происходит по самому короткому итератору.

Пример 2. Использование filter с None для удаления ложных элементов.

Пример
mixed = [0, 1, False, 2, '', 'hello', None]
cleaned = list(filter(None, mixed))
print(cleaned)
[1, 2, 'hello']

Если первым аргументом filter передать None, то функция отсекает все значения, которые в логическом контексте равны False.

Пример 3. Сортировка строк по пользовательскому ключу.

Пример
words = ['яблоко', 'банан', 'киви', 'апельсин']
sorted_words = sorted(words, key=lambda s: len(s))
print(sorted_words)
# Сортировка по последней букве
sorted_words2 = sorted(words, key=lambda s: s[-1])
print(sorted_words2)
['киви', 'банан', 'яблоко', 'апельсин']
['банан', 'киви', 'апельсин', 'яблоко']

Аргумент key определяет функцию, вычисляющую значение для сравнения. Это позволяет гибко сортировать данные.

Пример 4. Объединение нескольких списков в список кортежей с помощью zip и распаковка в обратную операцию.

Пример
names = ['Иван', 'Мария', 'Пётр']
ages = [25, 30, 28]
cities = ['Москва', 'Санкт-Петербург', 'Казань']
combined = list(zip(names, ages, cities))
print(combined)
# Обратная операция: распаковка списка кортежей
names2, ages2, cities2 = zip(*combined)
print(names2, ages2, cities2)
[('Иван', 25, 'Москва'), ('Мария', 30, 'Санкт-Петербург'), ('Пётр', 28, 'Казань')]
('Иван', 'Мария', 'Пётр') (25, 30, 28) ('Москва', 'Санкт-Петербург', 'Казань')

Оператор * распаковывает список кортежей в аргументы для zip, что позволяет выполнить обратное преобразование.

Пример 5. Динамическое выполнение кода с помощью eval и exec (с осторожностью).

Пример
expr = "2 + 3 * 4"
result = eval(expr)
print(result)

code = """
def greet(name):
    return f'Привет, {name}!'
print(greet('Мир'))
"""
exec(code)
14
Привет, Мир!

eval вычисляет одно выражение и возвращает результат. exec выполняет произвольный код Python. Эти функции опасны при работе с непроверенным вводом.

Пример 6. Использование property для создания вычисляемых атрибутов.

Пример
class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14159 * self._radius ** 2

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value <= 0:
            raise ValueError("Радиус должен быть положительным")
        self._radius = value

c = Circle(5)
print(c.area)
c.radius = 10
print(c.area)
78.53975
314.159

Декоратор @property превращает метод в атрибут, доступный для чтения. Сеттер позволяет контролировать присваивание.

Стандартные функции Python - comments

En
стандартные функции языка python (python)