Отличный вопрос! Python богат на интересные и элегантные фрагменты кода, которые демонстрируют его мощь, читаемость и гибкость. Вот несколько "интересных" кодов, которые показывают различные аспекты Python — от умных трюков до полезных идей, а также те, что просто забавны.
1. "Дзен" Python’а
Это не совсем "код", но это стихотворение, которое можно получить, выполнив импорт. Оно отражает философию дизайна Python.
Python
Import this
Что выведет:
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one— and preferably only one —obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
2. "Оператор" Моржа (Walrus Operator :=) — Python 3.8+
Позволяет присваивать значение переменной как часть более крупного выражения. Делает код более лаконичным и эффективным, особенно в условных операторах и циклах.
Python
# Без оператора моржа
Data = [1, 2, 3, 4, 5]
N = len(data)
If n > 3:
print(f"Список достаточно длинный: {n} элементов.")
# С оператором моржа
Data = [1, 2, 3, 4, 5]
If (n := len(data)) > 3: # Присваиваем значение n и сразу проверяем условие
print(f"Список достаточно длинный: {n} элементов.")
# Пример в цикле while
# Чтение данных до тех пор, пока строка не пуста
Lines = []
While (line := input("Введите строку (пустая для выхода): ")) != "":
lines. append(line)
Print("Вы ввели:", lines)
3. "Список в одну строку" (List Comprehensions)
Мощный и элегантный способ создания списков.
Python
# Создать список квадратов чисел от 0 до 9
Squares = [x**2 for x in range(10)]
Print(f"Квадраты: {squares}") # Вывод: Квадраты: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Фильтрация и преобразование в одной строке
Even_squares = [x**2 for x in range(10) if x % 2 == 0]
Print(f"Квадраты четных чисел: {even_squares}") # Вывод: Квадраты четных чисел: [0, 4, 16, 36, 64]
# То же самое для словарей (Dictionary Comprehensions)
Squares_dict = {x: x**2 for x in range(5)}
Print(f"Словарь квадратов: {squares_dict}") # Вывод: Словарь квадратов: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
4. Множественные присваивания и распаковка
Python позволяет легко присваивать значения нескольким переменным и распаковывать итерируемые объекты.
Python
# Множественное присваивание
A, b = 10, 20
Print(f"a: {a}, b: {b}") # Вывод: a: 10, b: 20
# Обмен значениями переменных без временной переменной
A, b = b, a
Print(f"a: {a}, b: {b}") # Вывод: a: 20, b: 10
# Распаковка кортежа/списка
Point = (3, 5)
X, y = point
Print(f"x: {x}, y: {y}") # Вывод: x: 3, y: 5
# Использование * для сбора оставшихся элементов
Head, *tail, last = [1, 2, 3, 4, 5, 6]
Print(f"head: {head}, tail: {tail}, last: {last}") # Вывод: head: 1, tail: [2, 3, 4, 5], last: 6
5. Декораторы (@)
Декораторы позволяют изменить поведение функции или класса, "обернув" их другой функцией. Это мощный инструмент для добавления функциональности (логирование, кэширование, аутентификация) без изменения исходного кода.
Python
Def my_decorator(func):
def wrapper():
print("Что-то происходит до вызова функции.")
func()
print("Что-то происходит после вызова функции.")
return wrapper
@my_decorator
Def say_hello():
print("Привет, мир!")
Say_hello()
# Вывод:
# Что-то происходит до вызова функции.
# Привет, мир!
# Что-то происходит после вызова функции.
6. Генераторы и Yield
Генераторы — это функции, которые можно приостановить и возобновить, что позволяет эффективно обрабатывать большие объемы данных, не загружая их все в память. Ключевое слово yield превращает функцию в генератор.
Python
Def fibonacci_generator(n):
a, b = 0, 1
for _ in range(n):
yield a # Возвращает значение, но не завершает функцию
a, b = b, a + b
# Использование генератора
Fib_sequence = fibonacci_generator(10)
For num in fib_sequence:
print(num, end=" ") # Вывод: 0 1 1 2 3 5 8 13 21 34
Print()
# Применение для больших файлов
Def read_large_file(filepath):
with open(filepath, ‘r’) as f:
for line in f:
yield line. strip()
# for line in read_large_file("my_big_data. log"):
# process_line(line)
7. Контекстные менеджеры (With)
Оператор with используется для управления ресурсами (файлами, сетевыми соединениями и т. д.), гарантируя, что они будут правильно закрыты после использования, даже если произойдет ошибка.
Python
# Работа с файлом:
# Python автоматически закроет файл f после блока with
With open("my_file. txt", "w") as f:
f. write("Это первая строка.\n")
f. write("Это вторая строка.")
# Чтение файла
With open("my_file. txt", "r") as f:
content = f. read()
Print(content)
8. Collections модуль (особенно Counter)
Модуль collections предоставляет специализированные типы данных. Counter особенно полезен для подсчета встречаемости элементов.
Python
From collections import Counter
Data = [‘a’, ‘b’, ‘c’, ‘a’, ‘b’, ‘a’, ‘d’]
Counts = Counter(data)
Print(f"Счетчик: {counts}") # Вывод: Счетчик: Counter({‘a’: 3, ‘b’: 2, ‘c’: 1, ‘d’: 1})
Sentence = "hello world this is a test hello world"
Word_counts = Counter(sentence. split())
Print(f"Частота слов: {word_counts}") # Вывод: Частота слов: Counter({‘hello’: 2, ‘world’: 2, ‘this’: 1, ‘is’: 1, ‘a’: 1, ‘test’: 1})
Print(f"Самые частые слова: {word_counts. most_common(2)}") # Вывод: Самые частые слова: [(‘hello’, 2), (‘world’, 2)]
9. Использование Zip() для итерации по нескольким спискам
Функция zip() объединяет элементы из нескольких итерируемых объектов.
Python
Names = ["Alice", "Bob", "Charlie"]
Ages = [25, 30, 35]
Cities = ["New York", "London", "Paris"]
For name, age, city in zip(names, ages, cities):
print(f"{name} ({age}) живет в {city}.")
# Вывод:
# Alice (25) живет в New York.
# Bob (30) живет в London.
# Charlie (35) живет в Paris.
10. Lambda функции (анонимные функции)
Маленькие, анонимные функции, часто используемые для коротких операций, особенно как аргументы для функций высшего порядка (map, filter, sorted).
Python
# Сортировка списка кортежей по второму элементу
Pairs = [(1, ‘c’), (3, ‘a’), (2, ‘b’)]
Sorted_pairs = sorted(pairs, key=lambda pair: pair[1])
Print(f"Отсортированные пары: {sorted_pairs}") # Вывод: Отсортированные пары: [(3, ‘a’), (2, ‘b’), (1, ‘c’)]
# Фильтрация списка
Numbers = [1, 2, 3, 4, 5, 6]
Even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
Print(f"Четные числа: {even_numbers}") # Вывод: Четные числа: [2, 4, 6]
Эти примеры демонстрируют лишь малую часть того, что делает Python таким "интересным" и мощным языком. Его читаемость, гибкость и обширная стандартная библиотека, а также сторонние пакеты, позволяют решать самые разнообразные задачи элегантным и эффективным способом.