Причет, чемпионы! Нашлось время собрать коллекцию хитростей на python в примерах. Примеры давно копились у меня в черновиках, и вот делюсь! Это первая часть, вторая будет сразу на 100 пунктов. Поехали!
1. Списковые включения (List Comprehensions)
squares = [x**2 for x in range(10)] print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Преимущества: Код становится более компактным и легко воспринимаемым, улучшая читаемость и производительность благодаря встроенной оптимизации.
2. Генераторы
def generate_numbers(n): for i in range(n): yield i * 2 gen = generate_numbers(5) print(list(gen)) # [0, 2, 4, 6, 8]
Преимущества: Генераторы экономят память, создавая значения по мере необходимости, что особенно полезно для больших наборов данных.
3. Функция enumerate()
fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(index, fruit) # 0 apple # 1 banana # 2 cherry
Преимущества: Упрощает получение индекса и значения одновременно без необходимости управления счетчиком.
4. Функция zip()
names = ['Alice', 'Bob', 'Charlie'] ages = [25, 30, 35] combined = list(zip(names, ages)) print(combined) # [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
Преимущества: Позволяет удобно объединять несколько списков в кортежи, упрощая работу с парами значений.
5. Использование *args и **kwargs
def example_function(*args, **kwargs): print("args:", args) print("kwargs:", kwargs) example_function(1, 2, 3, name="Alice", age=25) # args: (1, 2, 3) # kwargs: {'name': 'Alice', 'age': 25}
Преимущества: Обеспечивает гибкость в передаче произвольного количества аргументов и именованных параметров в функции.
6. Словари с пониманием (Dictionary Comprehensions)
squares_dict = {x: x**2 for x in range(5)} print(squares_dict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Преимущества: Позволяет создавать словари более лаконично и читаемо, чем с использованием циклов.
7. Функция map()
numbers = [1, 2, 3, 4] squared = list(map(lambda x: x**2, numbers)) print(squared) # [1, 4, 9, 16]
Преимущества: Упрощает применение функции ко всем элементам списка без необходимости использовать циклы.
8. Функция filter()
numbers = [1, 2, 3, 4, 5] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # [2, 4]
Преимущества: Позволяет легко фильтровать элементы списка по заданному условию.
9. Использование set() для удаления дубликатов
numbers = [1, 2, 2, 3, 4, 4, 5] unique_numbers = set(numbers) print(unique_numbers) # {1, 2, 3, 4, 5}
Преимущества: Быстро удаляет дубликаты, обеспечивая уникальность элементов.
10. Функция sorted()
unsorted_list = [5, 2, 3, 1, 4] sorted_list = sorted(unsorted_list) print(sorted_list) # [1, 2, 3, 4, 5]
Преимущества: Упрощает сортировку списков, предоставляя возможность сортировать по умолчанию или по заданным критериям.
11. Использование defaultdict из модуля collections
from collections import defaultdict dd = defaultdict(int) dd['apple'] += 1 dd['banana'] += 2 print(dd) # defaultdict(<class 'int'>, {'apple': 1, 'banana': 2})
Преимущества: Позволяет автоматизировать создание ключей со значениями по умолчанию, что упрощает управление словарями.
12. Использование Counter из модуля collections
from collections import Counter fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'] count = Counter(fruits) print(count) # Counter({'banana': 3, 'apple': 2, 'orange': 1})
Преимущества: Удобно подсчитывает количество вхождений элементов, обеспечивая простой анализ частоты.
13. Использование itertools для создания итераторов
import itertools count = itertools.count(start=5, step=2) print(next(count)) # 5 print(next(count)) # 7
Преимущества: Позволяет создавать бесконечные итераторы, которые можно использовать для генерации последовательностей.
14. Использование with для управления ресурсами
with open('example.txt', 'w') as f: f.write('Hello, World!') # Файл автоматически закрывается после выхода из блока with
Преимущества: Обеспечивает автоматическое управление ресурсами, предотвращая утечки памяти и открытые файлы.
15. Функция any() и all()
numbers = [1, 2, 3, 4] print(any(x > 3 for x in numbers)) # True print(all(x > 0 for x in numbers)) # True
Преимущества: Упрощает проверку условий для коллекций, позволяя быстро оценивать логические выражения.
16. Использование lambda для создания анонимных функций
add = lambda x, y: x + y print(add(5, 3)) # 8
Преимущества: Позволяет создавать краткие функции на месте, что удобно для небольших операций.
17. Использование try и except для обработки исключений
try: result = 10 / 0 except ZeroDivisionError: print("Деление на ноль!")
Преимущества: Обеспечивает безопасное управление ошибками, предотвращая аварийное завершение программы.
18. Использование f-строк для форматирования строк
name = "Alice" age = 30 print(f"{name} is {age} years old.") # Alice is 30 years old.
Преимущества: Позволяет легко и удобно форматировать строки, улучшая читаемость кода.
19. Использование re для работы с регулярными выражениями
import re text = "The rain in Spain" match = re.search(r'\bS\w+', text) print(match.group()) # Spain
Преимущества: Упрощает поиск и манипуляцию строками с использованием мощных регулярных выражений.
20. Использование json для работы с JSON данными
import json data = {'name': 'Alice', 'age': 30} json_data = json.dumps(data) print(json_data) # {"name": "Alice", "age": 30}
Преимущества: Позволяет легко сериализовать и десериализовать данные в формате JSON, что полезно для работы с API.
21. Использование datetime для работы с датами и временем
from datetime import datetime now = datetime.now() print(now) # Текущая дата и время
Преимущества: Упрощает работу с датами и временем, предоставляя доступ к различным атрибутам и методам.
22. Использование os и sys для работы с операционной системой
import os current_directory = os.getcwd() print(current_directory) # Текущий рабочий каталог
Преимущества: Позволяет взаимодействовать с операционной системой, получая информацию о файловой системе и среде выполнения.
23. Использование pickle для сериализации объектов
import pickle data = {'name': 'Alice', 'age': 30} with open('data.pkl', 'wb') as f: pickle.dump(data, f) with open('data.pkl', 'rb') as f: loaded_data = pickle.load(f) print(loaded_data) # {'name': 'Alice', 'age': 30}
Преимущества: Упрощает процесс сериализации и десериализации объектов, что полезно для сохранения состояния программы.
24. Использование @staticmethod и @classmethod
class MyClass: @staticmethod def static_method(): return "This is a static method." @classmethod def class_method(cls): return f"This is a class method of {cls.__name__}." print(MyClass.static_method()) # This is a static method. print(MyClass.class_method()) # This is a class method of MyClass.
Преимущества: Позволяет организовывать код и разделять методы, которые работают с экземплярами и классами.
25. Использование property() для создания свойств
class Person: def __init__(self, name): self._name = name @property def name(self): return self._name person = Person("Alice") print(person.name) # Alice
Преимущества: Позволяет создавать свойства с контролем доступа, улучшая инкапсуляцию.
26. Использование assert для отладки
x = 5 assert x > 0, "x должно быть положительным" # Не выбрасывает исключение
Преимущества: Упрощает отладку, позволяя добавлять проверки условий в коде.
27. Использование timeit для измерения времени выполнения кода
import timeit execution_time = timeit.timeit('sum(range(100))', number=10000) print(execution_time) # Время выполнения
Преимущества: Позволяет точно измерять производительность кода, помогая в оптимизации.
28. Использование functools.lru_cache для кэширования результатов
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(10)) # 55
Преимущества: Ускоряет выполнение рекурсивных функций за счет кэширования результатов, что особенно полезно для вычислений с повторяющимися вызовами.
29. Использование contextlib для создания контекстных менеджеров
from contextlib import contextmanager @contextmanager def my_context(): print("Entering the context") yield print("Exiting the context") with my_context(): print("Inside the context") # Entering the context # Inside the context # Exiting the context
Преимущества: Позволяет создавать пользовательские контекстные менеджеры, улучшая управление ресурсами.
30. Использование numpy и pandas для работы с данными
import numpy as np import pandas as pd # Пример с numpy array = np.array([1, 2, 3, 4]) print(array * 2) # [2 4 6 8] # Пример с pandas data = {'Name': ['Alice', 'Bob'], 'Age': [30, 25]} df = pd.DataFrame(data) print(df) # Name Age # 0 Alice 30 # 1 Bob 25
Преимущества: Обеспечивает мощные инструменты для анализа данных и работы с массивами, упрощая манипуляции с большими объемами данных. Про pandas и numpy можно часами хитрости расписывать. Полезно знать хитрость про типы. Очень мощные инструменты!
Заключение
На python существует большое количество прикольных трюков, которые упрощают код и углубляют знания о языке. Если вам нужны дополнительные примеры или объяснения, дайте знать! Я всегда на связи! А если вы интересуетесь data science, мой канал для вас! Продолжение статьи закину в канал!
Кстати, недавно я сделал разбор примера того, как мои студенты выполняют фриланс заказы на python!
ссылка на оригинал статьи https://habr.com/ru/articles/870920/
Добавить комментарий