Также в Python имеется тип данных memoryview, предоставляющий доступ к внутренним данным объекта, который поддерживает буферный протокол, без копирования.
Для создания байтовых объектов можно использовать байтовые литералы (синтаксис схож со строковыми литералами, за исключением того, что добавляется префикс "b").
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤2
1. Распаковка в несколько переменных:
a, b, c = 1, 2, 3
# a = 1, b = 2, c = 3
2. Распаковка посимвольно в строки:
a, b = "12"
# a = '1', b = '2'
3. Распаковка с использованием звёздочки (
*):a, *b = 1, 2, 3
# a = 1, b = [2, 3]
4. Распаковка в переменную со звёздочкой (
*):a, *b, c = 1, 2, 3, 4
# a = 1, b = [2, 3], c = 4
5. Игнорирование значений при распаковке:
a, _, b = 7, 8, 9
# a = 7, b = 9 (значение 8 игнорируется)
Пропуск значений, которые не нужны при присвоении.
Можно использовать любые итерируемые объекты, такие как списки, кортежи, строки, объекты, поддерживающие итерацию и даже функция range():
- Список:
a, b, c = [4, 5, 6]
# a = 4, b = 5, c = 6
- Кортеж:
x, y = (10, 20)
# x = 10, y = 20
- Строка:
char1, char2, char3 = "xyz"
# char1 = 'x', char2 = 'y', char3 = 'z'
- Использование range():
a, b, c = range(1, 4)
# a = 1, b = 2, c = 3
Распаковка значений в Python - удобный и эффективный способ присваивания значений переменным из итерируемых объектов, делая код более читаемым и компактным. Это дает гибкость при работе с данными различных типов и структур.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4⚡1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
- await — ждёт, пока задача завершится.
- loop.create_task() — запускает задачу в фоне, не блокируя выполнение остального кода.
import asyncio
async def task(name):
print(f"Начал {name}")
await asyncio.sleep(2)
print(f"Закончил {name}")
async def main():
t1 = asyncio.create_task(task("Задача 1"))
t2 = asyncio.create_task(task("Задача 2"))
print("Обе задачи запущены!")
await t1
await t2
asyncio.run(main())
обе задачи выполняются одновременно, а не по очереди.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🤣3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2
GeoPandas расширяет функциональность pandas, добавляя поддержку геометрических типов данных. Это позволяет эффективно работать с пространственными данными, выполнять геометрические операции и визуализировать результаты.
import geopandas as gpd
# Чтение геоданных
gdf = gpd.read_file('path/to/your/geodata.shp')
# Базовые операции
print(gdf.head())
print(gdf.crs) # Система координат
Визуализация данных
import matplotlib.pyplot as plt
gdf.plot()
plt.title('Визуализация геоданных')
plt.show()
Выполнение геометрических операций, таких как буферизация:
buffered = gdf.geometry.buffer(1) # Создание буфера в 1 единицу
Объединение двух наборов геоданных на основе их пространственных отношений:
cities = gpd.read_file('cities.shp')
countries = gpd.read_file('countries.shp')
cities_with_countries = gpd.sjoin(cities, countries, how="inner", predicate="within")Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥2
Что выдаст код выше❔
Anonymous Quiz
7%
[2, 3, 4, 1]
23%
[1, 2, 3, 4]
6%
[1, 4, 3, 2]
64%
[4, 3, 2, 1]
❤4👍2🤔2🤓2👀2🤯1
Срез x[::-1] инвертирует список, Применение его трижды возвращает исходный порядок.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥2
Функция all принимает на вход итерируемый объект (например, список) и возвращает True, если все его элементы являются истинными (или, если итерируемый объект пустой). Например:
numbers = [1, 2, 3, 4]
print(all(numbers)) # Выводит: True
Функция any, как и all, принимает на вход итерируемый объект, но возвращает True, если хоть один из его элементов является истинным. Если итерируемый объект пустой, функция any возвращает False. Например:
numbers = [0, 0, 1, 0]
print(any(numbers)) # Выводит: True
Функции all и any можно использовать вместе, чтобы проверить сложные условия. Например, мы можем проверить, все ли элементы в списке положительные и есть ли среди них хоть одно четное число:
numbers = [1, 2, 3, 4]
print(all(num > 0 for num in numbers) and any(num % 2 == 0 for num in numbers)) # Выводит: True
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
—Возбуждение существующих исключений: Вы можете использовать
raise без каких-либо параметров в блоке except, чтобы повторно вызвать текущее исключение. —Создание собственных исключений: Вы можете создать или вызвать собственное исключение, создав объект исключения и передав его в
raise.def divide(a, b):
if b == 0:
raise ValueError("Деление на ноль невозможно.")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(f"Ошибка: {e}")
divide вызывает исключение ValueError, если второй аргумент равен нулю. В блоке try мы пытаемся выполнить деление, и если возникает ошибка, мы перехватываем её и выводим сообщение об ошибке.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥3
Функциональное программирование - это парадигма, в которой процесс вычисления рассматривается как вычисление математических функций. Основная идея заключается в том, чтобы избегать изменяемого состояния и мутаций данных.
Функциональное программирование становится все популярнее благодаря своим преимуществам в читаемости, тестируемости и параллельном выполнении. Хотя оно может потребовать некоторого времени для освоения, инвестиции в изучение ФП могут значительно улучшить качество вашего кода и эффективность разработки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Казалось бы, Python — язык высокого уровня с автоматическим управлением памятью. Зачем нам вообще беспокоиться об этом? Но, друзья мои, даже в Пайтоне память не бесконечна. Особенно когда вы работаете с большими данными или создаете высоконагруженные приложения.
memory_profiler — это как швейцарский нож для анализа памяти. Вот пример его использования:
from memory_profiler import profile
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
python -m memory_profiler script.py, и вы увидите подробный отчет о использовании памяти. Красота, правда?Если memory_profiler — это швейцарский нож, то line_profiler — это микроскоп. Он покажет вам использование памяти построчно:
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
my_func()
kernprof -l -v script.py, и вы увидите, какая строчка сколько памяти съедает.objgraph — это как рентген для вашего кода. Он позволяет визуализировать объекты в памяти:
import objgraph
x = []
y = [x, [x], dict(x=x)]
objgraph.show_refs([y], filename='sample-graph.png')
А теперь — жемчужина в короне Python 3. tracemalloc — это встроенный модуль для отслеживания выделения памяти:
import tracemalloc
tracemalloc.start()
# ваш код здесь
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Топ 10 ]")
for stat in top_stats[:10]:
print(stat)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥1
Этот метод извлекает ресурс с сервера. Он идемпотентен: несколько идентичных запросов возвращают один и тот же результат.
Этот метод обновляет или создает ресурс. Он также идемпотентен: несколько идентичных запросов обновят один и тот же ресурс.
Этот метод используется для создания новых ресурсов. Он не идемпотентен: два одинаковых POST-запроса создадут дублированные ресурсы.
Этот метод используется для удаления ресурса. Он идемпотентен: несколько идентичных запросов удалят один и тот же ресурс.
Метод PATCH применяется для частичного изменения ресурса.
Метод HEAD запрашивает ответ, идентичный GET-запросу, но без тела ответа.
Метод CONNECT устанавливает туннель к серверу, идентифицированному целевым ресурсом.
Этот метод описывает параметры связи для целевого ресурса.
Этот метод выполняет тест возврата сообщения по пути к целевому ресурсу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3❤2
import requests
url = '<https://example.com/image.jpg>'
response = requests.get(url)
with open('image.jpg', 'wb') as f:
f.write(response.content)
Важно обрабатывать возможные ошибки при скачивании файла. Если файл не найден или произошла другая ошибка, requests вернет код ответа, отличный от 200. В этом случае вы должны проверять статус ответа перед записью файла.
import requests
headers = {'referer': 'https://nottka.com/4364-yoshinao-nakada-etude-allegro.html'}
response = requests.get('https://nottka.com/index.php?do=download&id=4420', headers=headers)
with open('4420.pdf', 'wb') as file:
file.write(response.content)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Монолитная архитектура представляет собой традиционный подход к разработке приложений, где все компоненты тесно связаны и работают как единое целое.
Микросервисная архитектура разбивает приложение на набор небольших, независимых сервисов, каждый из которых отвечает за конкретную бизнес-функцию.
Выбор архитектуры зависит от нескольких факторов:
Выбор между микросервисами и монолитной архитектурой не является универсальным. Каждый подход имеет свои сильные стороны, и правильный выбор зависит от конкретных требований вашего проекта, ресурсов команды и долгосрочных целей. Важно тщательно оценить все факторы и принять решение, которое наилучшим образом соответствует вашим потребностям.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥1
Итерируемый счетчик в Python - это объект, который можно использовать в цикле for и других итерационных контекстах. Он позволяет последовательно получать значения, обычно числовые, в заданном диапазоне или по определенному правилу.
Давайте рассмотрим пример реализации простого итерируемого счетчика:
class IterableCounter:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current > self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
В этом примере:
Теперь мы можем использовать наш счетчик в цикле for:
counter = IterableCounter(1, 5)
for num in counter:
print(num)
В Python есть встроенные альтернативы для простых случаев:
Итерируемые счетчики в Python - мощный инструмент для создания пользовательских последовательностей. Они особенно полезны, когда стандартные функции не удовлетворяют специфическим требованиям вашей задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
a = 3
b = 10
print('a больше b') if a > b else print('a меньше b')
result = 'Четное' if a % 2 == 0 else 'Нечетное'
print(result)
# Результат:
# a меньше b
# Нечетное
—Для вывода одной из двух фраз в зависимости от условия
a > b.—Для присваивания переменной
result одного из двух значений в зависимости от четности a.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1