7 расширенных возможностей Python
https://t.me/data_analysis_ml
1. Оператор with
Оператор with в Python — это удобный способ автоматического освобождения ресурсов, которые больше не нужны, таких как дескрипторы файлов и соединения с базами данных. Для примера рассмотрим следующий код:
with open(‘/tmp/file.txt’) as f: data = f.read()
В этом коде оператор with гарантирует, что дескриптор файла f будет автоматически закрыт после завершения блока кода. Это эквивалентно следующей записи:
f = open(‘/tmp/file.txt’) try: data = f.read() finally: f.close()
Оператор with особенно полезен при работе с ресурсами, доступность которых не гарантирована, например с сетевыми соединениями.
Например, следующий код использует with для безопасного подключения к базе данных:
with closing(MySQLdb.connect(host=’localhost’, user=’root’, passwd=’secret’)) as conn: cur = conn.cursor() cur.execute(“USE mydatabase”) … ---- Приведенный выше код открывает соединение с базой данных MySQL и создает курсор. Затем курсор используется для выполнения оператора SQL, который возвращает некоторые данные. Наконец, соединение закрывается.
2. Оператор yield
Оператор yield в Python является мощным инструментом для создания итераторов. При вызове функции, содержащей yield, возвращается итератор, который можно использовать для итерации по значениям функции yield. Для примера рассмотрим следующий код:
def my_range(start, end): while start <= end: yield start start += 1 for i in my_range(1, 10): print(i)
Этот код определяет функцию my_range, которая возвращает итератор по диапазону значений. Затем в цикле for выполняется итерация по значениям, возвращаемым итератором.
Оператор yield особенно полезен для создания итераторов, возвращающих бесконечный поток значений, например поток случайно сгенерированных чисел.
Например, в следующем коде yield используется для создания бесконечного потока случайных чисел:
import random def rand_stream(): while True: yield random.random()
3. Функции lambda
Lambda-функции в Python — это анонимные функции, которые определяются в одной строке кода. Они часто используются в качестве функций обратного вызова и аргументов для других функций.
Например, следующий код сортирует список строк по их длине:
strings = [‘foo’, ‘bar’, ‘baz’] strings.sort(key=lambda s: len(s))
В этом коде функция lambda s: len(s) передается в качестве аргумента key методу sort. Эта функция используется для определения порядка сортировки строк в списке.
4. Функции iter и next
Функции iter и next в Python используются для работы с итераторами. Функция iter возвращает итератор для объекта, а next — следующее значение из итератора. Для примера рассмотрим следующий код:
l = [1, 2, 3] it = iter(l) print(next(it)) print(next(it)) print(next(it))
Этот код создает список l и итератор it для этого списка. Затем функция next используется для получения значений из итератора. Этот код выводит следующее:
5. Функция enumerate
Функция enumerate используется в Python для итерации по последовательности значений и возврата кортежа вида (index, value) для каждого значения в последовательности. Для примера рассмотрим следующий код:
l = [‘a’, ‘b’, ‘c’] for index, value in enumerate(l): print(index, value)
Этот код выполняет итерацию по списку l и выводит следующее:
6. Функции any и all
Функции any и all в Python используются для проверки истинности всех (all) или любого (any) значения в последовательности (соответственно). Для примера рассмотрим следующий код:
l = [True, True, False] if any(l): print(“At least one value is true”)/(“Хотя бы одно значение истинно”) if all(l): print(“All values are true”)/(“Все значения истинны”)
Этот код выводит следующее:
Хотя бы одно значение истинно.
7. Декораторы
Декораторы в Python — это отличный способ расширить поведение функции без изменения ее кода.
Декораторы применяются к функции путем добавления символа @ к имени функции. Для примера рассмотрим следующий код:
@log_calls def f(): print(“f called”)
Этот код определяет декоратор log_calls, который регистрирует каждый вызов функции f. Декоратор @log_calls применяется к функции f, добавляясь к имени функции.
Декораторы могут быть соединены в цепочку, то есть к одной функции может быть применено несколько декораторов. Для примера рассмотрим следующий код:
@log_calls @cache_results def f(): print(“f called”)
В этом коде функция f декорирована двумя декораторами: log_calls и cache_results. Это эквивалентно написанию следующего кода:
f = log_calls(cache_results(f))
Цепочка декораторов — это удобный способ применения нескольких декораторов к функции без необходимости изменять код функции.
Теперь в вашем Python-арсенале будут семь наиболее полезных расширенных возможностей этого языка. Эти мощные инструменты помогут писать более качественный код на Python.