from tqdm import tqdm
import time
# Простой пример с range
for i in tqdm(range(100)):
time.sleep(0.02) # Имитация длительной операции
# С ручным обновлением
with tqdm(total=100) as pbar:
for i in range(10):
time.sleep(0.1)
pbar.update(10) # Обновление индикатора на 10 единиц
# С описанием
for i in tqdm(range(100), desc="Обработка данных"):
time.sleep(0.02)
# Вложенные циклы
from tqdm import trange
for i in trange(4, desc="1st loop"):
for j in trange(5, desc="2nd loop", leave=False):
for k in trange(50, desc="3rd loop", leave=False):
time.sleep(0.001)
# С pandas
import pandas as pd
df = pd.DataFrame({'a': range(10000)})
# Применение tqdm к pandas DataFrame (apply с progress_apply)
tqdm.pandas() # Необходимо для progress_apply
df['b'] = df['a'].progress_apply(lambda x: x*x) # Индикатор выполнения для apply
# Пример с файлами
import os
with open("large_file.txt", "w") as f:
for i in trange(10000, desc="Создание файла"):
f.write("This is a line of text.\n")
with open("large_file.txt", "r") as f:
for line in tqdm(f, total=os.path.getsize("large_file.txt"), unit="B", unit_scale=True, unit_divisor=1024, desc="Чтение файла"):
# Обработка каждой строки файла
pass
range, ручным обновлением, описанием, вложенными циклами, интеграцией с pandas DataFrame с помощью progress_apply и обработкой файлов. Обратите внимание на использование tqdm.pandas() для работы с pandas. Пример с файлами показывает, как отображать прогресс чтения/записи с учетом размера файла.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥2
import asyncio
import aioredis
async def redis_example():
try:
# Подключение к Redis
redis = await aioredis.create_redis_pool(
'redis://localhost',
db=0,
encoding='utf-8', # Декодирование в UTF-8
minsize=5, # Минимальное количество соединений в пуле
maxsize=10 # Максимальное количество соединений в пуле
)
# Работа со строками
await redis.set('name', 'John Doe')
name = await redis.get('name')
print(f"Name: {name}") # Вывод: Name: John Doe
# Работа со списками
await redis.rpush('my_list', 'one', 'two', 'three')
list_length = await redis.llen('my_list')
list_items = await redis.lrange('my_list', 0, -1)
print(f"List length: {list_length}") # Вывод: List length: 3
print(f"List items: {list_items}") # Вывод: List items: ['one', 'two', 'three']
# Работа с хэшами
await redis.hset('user:1', 'name', 'Alice')
await redis.hset('user:1', 'age', 30)
user_data = await redis.hgetall('user:1')
print(f"User data: {user_data}") # Вывод: User data: {'name': 'Alice', 'age': '30'}
# Работа с множествами
await redis.sadd('my_set', 'apple', 'banana', 'cherry')
set_members = await redis.smembers('my_set')
print(f"Set members: {set_members}") # Вывод: Set members: {'apple', 'banana', 'cherry'}
# Использование pipeline
async with redis.pipeline(transaction=True) as pipe: # transaction=True для атомарности операций
await pipe.set('key1', 'value1')
await pipe.get('key1')
await pipe.hset('user:2', 'name', 'Bob')
results = await pipe.execute()
print(f"Pipeline results: {results}")
redis.close()
await redis.wait_closed()
except aioredis.RedisError as e:
print(f"Ошибка Redis: {e}")
if __name__ == "__main__":
asyncio.run(redis_example())
aioredis.create_redis_pool, работа с различными типами данных (строки, списки, хэши, множества), и использование pipeline для пакетной обработки команд в транзакции. encoding='utf-8' в параметрах подключения обеспечивает декодирование в UTF-8. minsize и maxsize управляют размером пула соединений. Обработка исключения aioredis.RedisError помогает выявить проблемы с Redis. Важно запускать асинхронный код внутри asyncio.run.Please open Telegram to view this post
VIEW IN TELEGRAM
1❤5👍4🔥1🥰1
— Быстрый и эффективный подсчёт статистик по данным, таких как сумма, среднее, медиана, дисперсия.
— Аппроксимация распределений и плотностей вероятности.
— Вычисление квантилей, сглаживания, гистограмм.
— Тестирование статистических гипотез, оценка p-value.
— Генерация случайных чисел из разных распределений.
— Первичного анализа и визуализации данных.
— Статистических тестов в научных исследованиях.
— Построения прототипов моделей машинного обучения.
— Анализа пользовательских действий и событий.
— Симуляции процессов на основе статистических моделей.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥2
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Инициализация драйвера Chrome (убедитесь, что ChromeDriver установлен и находится в PATH)
driver = webdriver.Chrome()
try:
# Открытие страницы
driver.get("https://www.example.com")
# Явное ожидание элемента с ID "my-element" (до 10 секунд)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "my-element"))
)
# Вывод текста элемента
print(element.text)
finally:
# Закрытие браузера
driver.quit()
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🔥4🤔1
click и предоставляет простой и интуитивно понятный способ определения команд, аргументов и опций.import typer
app = typer.Typer()
@app.command()
def hello(name: str):
"""
Простое приветствие.
"""
print(f"Привет, {name}!")
@app.command()
def goodbye(name: str, formal: bool = False):
"""
Прощание. Можно сделать формальным.
"""
if formal:
print(f"До свидания, {name}!")
else:
print(f"Пока, {name}!")
if __name__ == "__main__":
app()
python main.py --help, вы получите автоматически сгенерированную справку по использованию приложения.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3👻1
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
code = 'print("Hello, world!")'
highlighted_code = highlight(code, PythonLexer(), HtmlFormatter())
print(highlighted_code)
# <div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="s2">"Hello, world!"</span><span class="p">)</span>
# </pre></div>
highlight, PythonLexer и HtmlFormatter. Затем определяется исходный код, который нужно подсветить. Функция highlight принимает код, лексер (в данном случае PythonLexer для Python) и форматтер (в данном случае HtmlFormatter для HTML) и возвращает подсвеченный код.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5❤4
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(784, 128)
self.relu = nn.ReLU()
self.layer2 = nn.Linear(128, 10)
def forward(self, x):
x = self.layer1(x)
x = self.relu(x)
return self.layer2(x)
Создаем модель одной строчкой! 🎯
model = SimpleNet().to('cuda' if torch.cuda.is_available() else 'cpu')
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
tf.keras.layers.Dense(10)
])
# Компилируем модель
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
1. Подготовка данных (самая нудная, но важная часть)
2. Определение архитектуры (тут можно пофантазировать)
3. Обучение модели (запасайтесь терпением и мощным железом)
# PyTorch стиль
optimizer = torch.optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()
for epoch in range(10):
for batch_x, batch_y in dataloader:
optimizer.zero_grad()
outputs = model(batch_x)
loss = criterion(outputs, batch_y)
loss.backward()
optimizer.step()
# Разбиваем данные
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Следим за метриками
val_loss = []
for epoch in range(epochs):
model.train()
# ... обучение ...
model.eval()
with torch.no_grad():
val_predictions = model(X_val)
v_loss = criterion(val_predictions, y_val)
val_loss.append(v_loss.item())
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥4👍3🤣1
Plotly - это как швейцарский нож в мире визуализации. Вот простой пример создания интерактивного графика:
import plotly.express as px
import pandas as pd
# Создаём тестовые данные
df = pd.DataFrame({
'Месяц': ['Янв', 'Фев', 'Март', 'Апр', 'Май'],
'Продажи': [100, 150, 200, 180, 250],
'Прибыль': [20, 30, 40, 35, 50]
})
# Создаём интерактивный график
fig = px.line(df, x='Месяц', y=['Продажи', 'Прибыль'],
title='Динамика продаж и прибыли',
template='plotly_dark')
# Добавляем hover-эффекты
fig.update_traces(mode='lines+markers', hovertemplate='%{y:,.0f}₽')
# Сохраняем как HTML или показываем в браузере
fig.write_html('sales_dashboard.html')
А теперь давайте создадим что-то более продвинутое с Bokeh:
from bokeh.plotting import figure, show
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, HoverTool
import numpy as np
# Создаём интерактивный scatter plot
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
source = ColumnDataSource(data=dict(
x=x,
y=y,
size=np.random.uniform(5, 15, 1000),
color=['#%06x' % np.random.randint(0, 0xFFFFFF) for _ in range(1000)]
))
p = figure(width=800, height=600, title='Интерактивный Scatter Plot')
p.scatter('x', 'y', size='size', color='color', alpha=0.6, source=source)
# Добавляем интерактивные подсказки
hover = HoverTool(tooltips=[
('X', '@x{0.000}'),
('Y', '@y{0.000}'),
('Размер', '@size{0.00}')
])
p.add_tools(hover)
show(p)
import plotly.graph_objects as go
fig = go.Figure(
data=[go.Scatter(x=[1, 2, 3], y=[1, 3, 2])],
layout=dict(
updatemenus=[dict(
type="buttons",
buttons=[dict(label="Play",
method="animate",
args=[None])]
)]
)
)
from bokeh.plotting import curdoc
from functools import partial
from tornado.ioloop import IOLoop
def update():
source.data['y'] = np.random.rand(100)
curdoc().add_periodic_callback(update, 100) # Обновление каждые 100мс
from dataclasses import dataclass
from typing import List
@dataclass
class DataPoint:
x: float
y: float
category: str
data_points: List[DataPoint] = [] # Эффективнее, чем DataFrame для больших данных
- Plotly: если нужны красивые графики "из коробки" и важна простота использования
- Bokeh: если работаете с большими данными или нужна глубокая кастомизация
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥3
from transformers import pipeline
classifier = pipeline("sentiment-analysis") # Загрузка предобученной модели для анализа тональности текста
results = classifier([
"I love this library!",
"This is a terrible movie.",
"This is a neutral statement."
])
for result in results:
print(result)
# Примерный вывод:
# [{'label': 'POSITIVE', 'score': 0.9998950958251953}]
# [{'label': 'NEGATIVE', 'score': 0.9991175532341003}]
# [{'label': 'NEGATIVE', 'score': 0.9865201115608215}] # Модель может ошибаться, особенно на нейтральных высказываниях
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2') # Загрузка модели для генерации текста
text = generator("Once upon a time, there was a large language model.", max_length=50, num_return_sequences=2)
for generated_text in text:
print(generated_text['generated_text'])
# Примерный вывод (будет отличаться при каждом запуске):
# Once upon a time, there was a large language model. It was trained on a massive dataset of text and code, and it could generate text, translate languages, write different kinds of creative content, and answer your questions in an informative way.
# Once upon a time, there was a large language model. And he lived in a little house made of straw. One day, he was sitting in his house, reading a book
from transformers import pipeline
summarizer = pipeline("summarization")
text = """
The quick brown fox jumps over the lazy dog. This is a test sentence.
It is used to demonstrate text summarization. The fox is brown and quick.
The dog is lazy. Summarization is a useful NLP task.
"""
summary = summarizer(text, max_length=30, min_length=10, do_sample=False)
print(summary[0]['summary_text'])
# Примерный вывод:
# The quick brown fox jumps over the lazy dog. It is used to demonstrate text summarization. The fox is brown and quick. The dog is lazy.
pipeline для создания готовых к использованию объектов для анализа тональности текста, генерации текста и суммаризации. pipeline автоматически загружает необходимые модели и токенизаторы. Обратите внимание, что для первого запуска потребуется скачать предобученные модели, что может занять некоторое время. Также показаны примеры настройки параметров генерации и суммаризации.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3⚡2🔥2
from datasets import load_dataset
# Загрузка датасета "imdb" с Hugging Face Hub
dataset = load_dataset("imdb")
print(dataset)
# Вывод: DatasetDict({
# train: Dataset({
# features: ['text', 'label'],
# num_rows: 25000
# })
# test: Dataset({
# features: ['text', 'label'],
# num_rows: 25000
# })
# unsupervised: Dataset({
# features: ['text', 'label'],
# num_rows: 50000
# })
# })
train_data = dataset['train']
print(train_data[0]) # Доступ к первому примеру в обучающем наборе
# Вывод: {'text': 'A series of escapades demonstrating the adage that what is good for the goose is also good for the gander, some of which occasionally amuses but none of which amounts to much of a story.', 'label': 0}
small_train_dataset = dataset["train"].shuffle(seed=42).select(range(1000)) # Перемешивание и выборка
from datasets import ClassLabel
import random
import pandas as pd
def show_random_elements(dataset, num_examples=10):
picks = []
n = len(dataset)
for _ in range(num_examples):
pick = random.randint(0, n - 1)
picks.append(dataset[pick])
df = pd.DataFrame(picks)
if isinstance(dataset.features['label'], ClassLabel):
df['label'] = df['label'].apply(lambda x: dataset.features['label'].int2str(x))
print(df)
show_random_elements(small_train_dataset)
# Вывод: таблица с 10 случайными примерами
load_dataset. Выводится информация о структуре датасета и показан доступ к отдельным примерам. Также представлен пример перемешивания и выборки подмножества данных для создания меньшего обучающего набора. Функция show_random_elements демонстрирует удобный способ просмотра случайных элементов из датасета в формате таблицы, обрабатывая при этом ClassLabel для отображения понятных названий меток.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥4
Спасибо что читаете, ставите реакции и комментируете наш канал
И самое главное помните что следующий год предоставит вам гораздо больше возможностей для роста. Наш информационный канал поможет вам стать гораздо лучше и достичь всех начинаний которых вы хотите, и также напоминаем что Новый год - это семейный праздник, сделайте всё возможное чтобы встретить его в кругу близких друзей и родных, всего самого наилучшего, в новом 2025 году!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍6🔥3
Функция в Python — это самостоятельный блок кода, который выполняет определенную задачу. Представьте её как отдельный инструмент, который можно использовать где угодно в программе. Функции создаются с помощью ключевого слова def и могут принимать аргументы для обработки.
def calculate_area(length, width):
return length * width
# Использование функции
room_area = calculate_area(5, 4)
print(f"Площадь комнаты: {room_area} кв.м.")
Метод — это функция, которая принадлежит определённому классу или объекту. Он имеет доступ к данным объекта и может изменять его состояние. Методы всегда определяются внутри классов и вызываются через экземпляр класса или сам класс.
class BankAccount:
def __init__(self, balance):
self.balance = balance
def deposit(self, amount):
self.balance += amount
return f"Новый баланс: {self.balance}"
# Использование метода
account = BankAccount(1000)
account.deposit(500) # Вызов метода через объект
1. Область видимости:
- Функции работают с переданными им аргументами
- Методы имеют доступ к данным объекта через self
2. Способ вызова:
- Функции вызываются напрямую: function_name()
- Методы вызываются через объект: object.method()
3. Контекст выполнения:
- Функции независимы от контекста
- Методы всегда работают в контексте своего класса
• Для операций, не требующих доступа к состоянию объекта
• При работе с независимыми данными
• Для создания утилитарных операций
• При работе с данными объекта
• Когда логика тесно связана с классом
• Для реализации поведения объекта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥4
Ниже показан простой пример, который демонстрирует, как использовать JPype для вызова метода Java.
1. Предположим, у вас есть Java-класс
HelloWorld, который выглядит следующим образом:public class HelloWorld {
public static String greeting() {
return "Hello from Java!";
}
}2. Компилируйте этот класс и убедитесь, что .class файл доступен.
3. Затем вы можете использовать следующий код на Python для вызова метода
greeting:import jpype
# Запуск виртуальной машины Java
jpype.startJVM(jpype.getDefaultJVMPath())
# Загрузка класса
HelloWorld = jpype.JClass("HelloWorld")
# Вызов метода
result = HelloWorld.greeting()
print(result) # Вывод: Hello from Java!
# Остановка виртуальной машины Java
jpype.shutdownJVM()
— Доступ к библиотекам Java из Python.
— Интеграция с существующим Java кодом.
— Использование JVM из Python.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥2👌1
—Простой и понятный синтаксис
—Огромное комьюнити
—Отличная документация
—Ограниченные возможности для 3D
—Не самая высокая производительность
—Современный и чистый API
—Встроенная физика
—Хорошая производительность
—Меньше обучающих материалов
—Относительно молодая библиотека
—Работает на всех платформах, включая мобильные
—Поддержка мультитач
—Сложнее в освоении
—Больше подходит для приложений
—2D-платформеры
—Аркады
—Головоломки
—Карточные игры
—Шутеры с видом сверху
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥3
import pandas as pd на import modin.pandas as pd, можно значительно ускорить выполнение многих операций, таких как чтение данных, фильтрация, агрегация и другие.# !pip install modin[ray] # или modin[dask], если предпочитаете Dask
import time
import modin.pandas as pd # Замена import pandas as pd
start_time = time.time()
# Загрузка большого датасета (замените на свой путь к файлу)
df = pd.read_csv("large_dataset.csv")
# Выполнение некоторых операций с DataFrame
# ... (например, фильтрация, агрегация и т.д.) ...
df = df[df['column_name'] > 100]
df = df.groupby(['column_name1','column_name2'])['column_name3'].sum()
end_time = time.time()
print(f"Время выполнения с Modin: {end_time - start_time} секунд")
# Для сравнения, выполните тот же код с обычным Pandas:
import time
import pandas as pd
start_time = time.time()
# Загрузка большого датасета (замените на свой путь к файлу)
df = pd.read_csv("large_dataset.csv")
# Выполнение некоторых операций с DataFrame
# ... (например, фильтрация, агрегация и т.д.) ...
df = df[df['column_name'] > 100]
df = df.groupby(['column_name1','column_name2'])['column_name3'].sum()
end_time = time.time()
print(f"Время выполнения с Pandas: {end_time - start_time} секунд")
modin.pandas, а затем с обычным pandas, чтобы сравнить время выполнения. Для больших датасетов Modin может значительно сократить время обработки, автоматически распараллеливая вычисления. Убедитесь, что у вас установлен Ray или Dask (в зависимости от выбранного движка для Modin) и замените "large_dataset.csv" на путь к вашему большому CSV-файлу.Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥3
from boltons.iterutils import chunked
data = list(range(20))
chunks = list(chunked(data, 4)) # Разделение данных на чанки размером 4
print(chunks)
# Вывод: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]
from boltons.dictutils import OMD
# Ordered Multi Dict, сохраняет порядок добавления ключей и позволяет иметь несколько значений для одного ключа
omd = OMD()
omd[1] = "a"
omd[2] = "b"
omd[1] = "c"
print(omd)
# Вывод: OMD([(1, 'a'), (2, 'b'), (1, 'c')])
print(omd.getlist(1)) # Получение всех значений для ключа 1
# Вывод: ['a', 'c']
from boltons.funcutils import wraps
def my_decorator(f):
@wraps(f) # Сохраняет метаданные оригинальной функции
def wrapper(*args, **kwargs):
print("Before function call")
result = f(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def my_function(a, b):
"""
This is my function.
"""
return a + b
print(my_function(1, 2))
# Вывод:
# Before function call
# After function call
# 3
print(my_function.__doc__) # Метаданные сохраняются благодаря wraps
# Вывод: This is my function.
chunked для разделения списка на чанки, OMD (Ordered Multi Dict) для работы со словарем, сохраняющим порядок и позволяющим иметь несколько значений для одного ключа, и wraps для создания декораторов, сохраняющих метаданные декорируемых функций. Эти примеры показывают лишь небольшую часть функциональности, предоставляемой boltons. Библиотека содержит множество других полезных инструментов для различных задач.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥2
https://colab.research.google.com
• Бесплатный доступ к GPU и TPU для машинного обучения
• Полная интеграция с экосистемой Google (Drive, Sheets, Gmail)
• Поддержка Jupyter notebooks с возможностью совместного редактирования
• Предустановленные популярные библиотеки (TensorFlow, PyTorch, OpenCV)
• Возможность сохранения и загрузки моделей
• Выполнение долгих вычислений в фоновом режиме
• Бесплатное облачное хранилище до 15 ГБ
https://replit.com
• Мощный встроенный терминал с полным доступом
• Совместная работа в реальном времени с функцией pair programming
• Встроенный хостинг проектов с публичным URL
• Система контроля версий с интеграцией GitHub
• Автоматическое управление зависимостями
• Встроенный отладчик кода
• Поддержка кастомных конфигураций и переменных окружения
https://jupyter.org
• Интерактивные ноутбуки с поддержкой markdown
• Продвинутая визуализация данных и графиков
• Поддержка множества форматов (Python, R, Julia)
• Расширяемость через систему плагинов
• Встроенный просмотрщик CSV, JSON, изображений
• Интерактивные виджеты для данных
• Возможность создания презентаций
https://www.pythonanywhere.com
• Полноценный хостинг веб-приложений Python
• Консоль Python с доступом через браузер
• Поддержка популярных фреймворков (Django, Flask)
• Встроенная поддержка MySQL и PostgreSQL
• Бесплатный тариф с базовым функционалом
• Автоматическое обновление сертификатов SSL
• Планировщик задач для автоматизации
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5👍4
from peewee import *
# Создаем подключение к базе данных SQLite (или подключаемся к существующей)
db = SqliteDatabase('my_database.db')
# Определяем модель данных (таблицу)
class User(Model):
username = CharField(unique=True)
password = CharField()
email = CharField()
active = BooleanField(default=True)
joined_date = DateTimeField()
class Meta:
database = db # Связываем модель с базой данных
# Создаем таблицу в базе данных (если она не существует)
db.connect()
db.create_tables([User])
# Создаем нового пользователя
user = User(username='testuser', password='password', email='test@example.com', joined_date='2024-07-26 10:00:00')
user.save() # Сохраняем пользователя в базу данных
# Получаем пользователя по имени пользователя
retrieved_user = User.get(User.username == 'testuser')
print(retrieved_user.email) # Вывод: test@example.com
# Обновляем данные пользователя
retrieved_user.active = False
retrieved_user.save()
# Удаляем пользователя
retrieved_user.delete_instance()
# Запрос с фильтрацией
active_users = User.select().where(User.active == True)
for user in active_users:
print(user.username)
db.close()
User, подключение к базе данных SQLite, создание таблицы, добавление, получение, обновление и удаление записей. Также показан пример простого запроса с фильтрацией. peewee предоставляет интуитивно понятный интерфейс для работы с базами данных, делая код более читаемым и легким в поддержке, чем при использовании сырых SQL-запросов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥2
— Используя конструктор
complex(a, b), где a — действительная часть, b — мнимая.— Из вещественного числа, добавив к нему мнимую часть. Например,
a + bj.— Из строкового представления с помощью
complex(string).Для доступа к частям комплексного числа используются атрибуты
real и imag. abs(), conjugate(), polar() позволяют получить модуль, сопряженное число и представление в тригонометрической форме.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5⚡2🔥2