Python RU
13.4K subscribers
871 photos
41 videos
36 files
1.12K links
Все для python разработчиков

админ - @haarrp

@python_job_interview - Python собеседования

@ai_machinelearning_big_data - машинное обучение

@itchannels_telegram - 🔥лучшие ит-каналы

@programming_books_it - it книги

@pythonl

РКН: clck.ru/3Fmy2j
加入频道
🖥 Полезные приемы с кодом для аналитиков данных на Python

1. Python itertools groupby удобный способ группировки - https://www.youtube.com/watch?v=Rt1gl4fM62k

2. Полезные приемы в Pandas - https://www.youtube.com/watch?v=Sd2S5rXe8sY&t=165s

3. Раскройте потенциал Python Numpy: руководство для начинающих в науке о данных - https://www.youtube.com/watch?v=XX2XremQ0fg&t=12s

4. Data science c Python.Ускоряем Pandas в 120 раз- https://www.youtube.com/watch?v=-dAdaEv23vk&t=4s

5. 26 практических приёмов и хитростей Python - https://www.youtube.com/watch?v=vAMyfvtxxdQ&t=5s

6. 5 декораторов Python для Data Science проектов - https://www.youtube.com/watch?v=rxq11WHAlqU

7. ChatGPT + Midjouney на практике - https://www.youtube.com/watch?v=2gUqbc3Ikmo&t=5s

8. Разбор вопросов с собеседований Python - https://www.youtube.com/watch?v=4L1e-A3AOL4&t=5s

9. 15 полезных лайфхаков с кодом Машинного обучения на Python - https://www.youtube.com/watch?v=loOtlwcdiBA&t=4s

10. Декораторы Python, которые выведут ваш код на новый уровень - https://www.youtube.com/watch?v=qxrGAogl4iM

11. 7 инструментов Python, который должен знать каждый специалист машинного обучения - https://www.youtube.com/watch?v=RGEftBi0C9Y

12. Как загружать данные в SQL в 20 раз быстрее на Python
- https://www.youtube.com/watch?v=eyeR1uWLnpM&t=2s

13. Data Science. Полезные советы по библиотеке Pandas - https://www.youtube.com/watch?v=neXc5Q-AWXY&t=3s

14. Data Science. Полезные советы по библиотеке Pandas - https://www.youtube.com/watch?v=neXc5Q-AWXY&t=3s

15. Дзен Python ООП: лучшие практики и шаблоны проектирования Python - https://www.youtube.com/watch?v=_MtX6QFJBRU

16. Python itertools. Хитрый способ избежать вложенных циклов - https://www.youtube.com/watch?v=TSvjYKIY01I&t=3s

17. Python. Генерация списка, словаря или множества в одну строку кода - https://www.youtube.com/watch?v=zS3HePvtxVc&t=10s

18. 8 крутых способов свести функции Python в одну строку - https://www.youtube.com/watch?v=jo3Q-rMggXk

19. Python itertools.compress. Удобный способ фильтрации данных - https://www.youtube.com/watch?v=8JGHID-_ApU&t=12s

20. Python Match/Case - https://www.youtube.com/watch?v=U_-NIKbKakM

21. Data Science. Советы по написанию эффективного кода на Python - https://www.youtube.com/watch?v=1Mcy-uatp_c&t=14s

22. Numpy векторизация вместо циклов в Python - https://www.youtube.com/watch?v=c7ypD2xet0E

🎞 Все видео по анализу данных

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖨Как построить сканер SQL-инъекций на Python

SQL-инъекция – это техника инъекции кода, которая используется для выполнения SQL-запросов через данные, вводимые пользователем в уязвимое веб-приложение. Это одна из самых распространенных и опасных техник взлома веб-приложений.

Установим необходимые библиотеки для этого урока:
pip3 install requests bs4

Импортируем необходимые модули:
import requests
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin
from pprint import pprint

# initialize an HTTP session & set the browser
s = requests.Session()
s.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"


Мы также инициализировали сессию запросов и установили пользовательский агент.

Поскольку SQL-инъекция – это все о пользовательском вводе, нам нужно будет сначала извлечь веб-формы. Нам понадобятся следующие функции:
def get_all_forms(url):
"""Given a `url`, it returns all forms from the HTML content"""
soup = bs(s.get(url).content, "html.parser")
return soup.find_all("form")


def get_form_details(form):
"""
This function extracts all possible useful information about an HTML `form`
"""
details = {}
# get the form action (target url)
try:
action = form.attrs.get("action").lower()
except:
action = None
# get the form method (POST, GET, etc.)
method = form.attrs.get("method", "get").lower()
# get all the input details such as type and name
inputs = []
for input_tag in form.find_all("input"):
input_type = input_tag.attrs.get("type", "text")
input_name = input_tag.attrs.get("name")
input_value = input_tag.attrs.get("value", "")
inputs.append({"type": input_type, "name": input_name, "value": input_value})
# put everything to the resulting dictionary
details["action"] = action
details["method"] = method
details["inputs"] = inputs
return details


Функция get_all_forms() использует библиотеку BeautifulSoup для извлечения всех тегов формы из HTML и возвращает их в виде списка Python, а функция get_form_details() получает в качестве аргумента один объект тега формы и разбирает полезную информацию о форме, такую как действие (целевой URL), метод (GET, POST и т.д.) и все атрибуты поля ввода (тип, имя и значение).

Далее мы определяем функцию, которая сообщает нам, есть ли на веб-странице ошибки SQL, это будет удобно при проверке на уязвимость SQL-инъекции:

Продолжение

@pro_python_code
Как ускорить ваш код на Python

Python — это универсальный язык программирования, который широко используется в различных областях, таких как веб-разработка, анализ данных, машинное обучение и искусственный интеллект.

Одной из основных причин его популярности является простота и удобочитаемость, что облегчает разработчикам написание и понимание кода. Однако одним из недостатков Python является его производительность, которая относительно ниже по сравнению с другими языками программирования, такими как C или Java. Поэтому очень важно писать эффективный код для обеспечения оптимальной производительности.

В этой статье мы рассмотрим некоторые советы и рекомендации о том, как писать более качественный и эффективный код на Python. Эти методы могут помочь вам оптимизировать код, сократить время его выполнения и улучшить его общее состояние. Давайте начинать!

Читать

@pro_python_code
10 проектов Python для оттачивания навыков

Python, универсальный и широко используемый язык программирования, предоставляет разработчикам уникальное сочетание мощности и простоты. В этой статье мы рассмотрим десять программ Python, которые демонстрируют возможности языка и то, как Python упрощает написание кода сложных задач.

Читать

@pro_python_code
🗣Создаем проект по распознаванию речи в Python

Распознавание речи – это технология, позволяющая преобразовывать человеческую речь в цифровой текст. В этом руководстве вы узнаете, как выполнить автоматическое распознавание речи с помощью Python.

В этом практическом руководстве, вы научитесь использовать:

Библиотека SpeechRecognition: Эта библиотека содержит несколько движков и API, как онлайн, так и офлайн. Мы будем использовать Google Speech Recognition, так как он быстрее запускается и не требует ключа API. У нас есть отдельный учебник по этому вопросу.
API Whisper: Whisper – это надежная модель распознавания речи общего назначения, выпущенная OpenAI. API стал доступен 1 марта 2023 года. Мы будем использовать API OpenAI для распознавания речи.
Работать с Whisper, которая имеет открытый исходный код. Поэтому мы можем напрямую использовать наши вычислительные ресурсы для выполнения ASR. У нас будет гибкость и возможность выбора, какой размер модели Whisper использовать.

📌 Читать

@pro_python_code
🖥 Необычные фишки Python.

1. Есть оператор “else”, но нет “if”

В Python можно использовать оператор “else” без “if”.

leaders = ["Elon", "Tim", "Warren"]

for i in leaders:
if i == "Yang":
print("Yang is a leader!")
break
else:
print("Not found Yang!")

2. Изменение неизменяемого кортежа

tp = ([1, 2, 3], 4, 5)
tp[0].append(4)
print(tp)
# ([1, 2, 3, 4], 4, 5)

Это происходит потому, что изменяемость вложенных объектов Python зависит от каждого объекта. tp  —  неизменяемый кортеж, но первый элемент tp  —  список, который является изменяемым.

3. 256 — это 256, но 257 — не 257

Иногда результаты при проверке на равенство чисел в Python могут удивить:

>>> a=256
>>> b=256
>>> a is b
True
>>> x=257
>>> y=257
>>> x is y
False

Для экономии времени и затрат памяти Python предварительно загружает все малые целые числа в диапазоне [-5, 256]. Поэтому, когда объявляется целое число в этом диапазоне, Python просто ссылается на кэшированное целое число и не создает новый объект.

a и b  —  один и тот же объект, но x и y  —  два разных объекта.

Чтобы убедиться в этом, выведем id каждой переменной:

>>> id(a)
1696073345424
>>> id(b)
1696073345424
>>> id(x)
1696122928496
>>> id(y)
1696122928752

Этот механизм называется интернированием целых чисел или кэшированием целых чисел.

Но что выведет следующий код? Снова False?

>>> 257 is 257
Python всегда старается сделать все возможное, чтобы сохранить ясность. Поскольку две переменные не были определены отдельно, Python получит достаточно контекста в рамках однострочной команды и на этот раз выведет True.

4. Интернирование строк
Подобно механизму интернирования целых чисел, Python также кэширует строки небольшого размера для экономии вычислительных ресурсов.

Рассмотрим пример:

>>> a = "Yang"
>>> b = "Yang"
>>> a is b
True
>>> c = "Yang Zhou"
>>> d = "Yang Zhou"
>>> c is d
False

Для приведенного выше примера был использован CPython с алгоритмом кэширования AST optimizer. Этот алгоритм может кэшировать до 4096 символов, но строки, включающие пробелы, не будут интернированы.

5. 0,1+0,2 — это не 0,3
Все знают, что 0,1+0,2 равно 0,3, но Python так не считает:

print(0.1+0.2==0.3)
# False

Каков же результат вычисления 0,1+0,2 в Python, если не 0,3?

print(0.1+0.2)
# 0.30000000000000004

По правде говоря, это не вина Python. Ни один компьютер не может точно вычислить плавающее значение.

6. “+=” быстрее, чем “=”
При конкатенации строк в Python операторы += и + могут дать один и тот же результат, но с разными временными затратами:

import timeit

print(timeit.timeit("s1 = s1 + s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
# 0.7268792000000001
print(timeit.timeit("s1 += s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
# 0.3451913999999999

При конкатенации более двух строк в Python оператор += быстрее, чем +. Поскольку +=  —  это операция in-place (на месте), время на создание нового объекта будет сэкономлено по сравнению с операцией +.

7. Три точки
Если вам потребуется заполнитель для Python-функции, вы, скорее всего, воспользуетесь ключевым словом pass:

def my_func():
pass

Но есть и другой способ сделать это:

def my_func():
...


8. Оператор “with”
Ни в одном другом языке программирования нет такого оператора, поэтому он удивляет начинающих в Python.

with open("test.txt",'w') as f:
f.write("Yang is writing!")

Оператор “with”  —  это синтаксический сахар для управления контекстом. Используя его, вы можете не прописывать явно функцию close() для закрытия файла, поскольку он будет закрыт автоматически после использования.

9. Префиксные операторы * и **

При чтении проектов Python с открытым исходным кодом вам, вероятно, неоднократно встречался следующий стиль определения функции:

def func(*args, **kwargs):
pass

Что означают эти странные звездочки?

Параметр с префиксом * может собрать любое количество позиционных аргументов в tuple.

C помощью звездочек можно производить распаковку итерируемых переменных

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 13 интересных скриптов Python

Каждый день мы сталкиваемся с множеством задач программирования, требующих сложного кодирования.

Вы не сможете решить эти проблемы с помощью простого базового синтаксиса Python. В этой статье я расскажу о 13 продвинутых скриптах Python, которые могут стать полезными инструментами в вашем проекте.

Читать дальше

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Numpy векторизация вместо циклов в Python

🎞 Video

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍 10 проектов на Python для начинающих

1. Игра “Виселица

Инструкции: Создайте классическую игру “Виселица”. Предложите пользователю угадывать слово по буквам до тех пор, пока он не угадает его правильно или пока не закончатся попытки.
import random

def hangman():
words = ['python', 'hangman', 'programming', 'code']
word = random.choice(words)
guesses = ''
attempts = 6

while attempts > 0:
for char in word:
if char in guesses:
print(char, end=' ')
else:
print('_', end=' ')
print()

guess = input("Guess a letter: ")
guesses += guess

if guess not in word:
attempts -= 1

if set(word) <= set(guesses):
print("Congratulations! You guessed the word.")
break
elif attempts == 0:
print("Sorry, you ran out of attempts. The word was", word)

hangman()


2. Калькулятор


Инструкции: Постройте простой калькулятор, выполняющий основные арифметические операции (+, -, *, /) над двумя числами.
def calculator():
num1 = float(input("Enter the first number: "))
operator = input("Enter an operator (+, -, *, /): ")
num2 = float(input("Enter the second number: "))

if operator == '+':
print(num1 + num2)
elif operator == '-':
print(num1 - num2)
elif operator == '*':
print(num1 * num2)
elif operator == '/':
print(num1 / num2)
else:
print("Invalid operator")

calculator()


3. Угадайте число

Инструкции: Создайте игру, в которой компьютер генерирует случайное число, а игрок пытается угадать его за определенное количество попыток.
import random

def guess_the_number():
number = random.randint(1, 100)
attempts = 0

while True:
guess = int(input("Take a guess: "))
attempts += 1

if guess < number:
print("Too low!")
elif guess > number:
print("Too high!")
else:
print("Congratulations! You guessed the number in", attempts, "attempts.")
break

guess_the_number()

4. Список дел

Инструкции: Создать приложение для составления списка дел, позволяющее пользователю добавлять, просматривать и удалять задачи.
def todo_list():
tasks = []

while True:
print("1. Add a task")
print("2. View tasks")
print("3. Remove a task")
print("4. Quit")

choice = input("Enter your choice: ")

if choice == '1':
task = input("Enter a task: ")
tasks.append(task)
elif choice == '2':
if tasks:
print("Tasks:")
for task in tasks:
print(task)
else:
print("No tasks.")
elif choice == '3':
if tasks:
task = input("Enter the task to remove: ")
if task in tasks:
tasks.remove(task)
print("Task removed.")
else:
print("Task not found.")
else:
print("No tasks.")
elif choice == '4':
break
else:
print("Invalid choice. Try again.")

todo_list()


Продолжение

@pro_python_code
10 наиболее часто задаваемых вопросов о списках Python на Stack Overflow

Список — это встроенная структура данных в Python. Он представлен в виде набора данных в квадратных скобках и может использоваться для хранения данных разных типов.

В этой статье мы рассмотрим 10 наиболее часто задаваемых вопросов о списках Python на Stack Overflow.

Читать

@pro_python_code
🤓 Как создать Telegram-бота с интеграцией ChatGPT.

1️⃣ Создание чатбота Telegram

Откройте вашу IDE и создайте файл с именем telegram-bot.py

Мы будем использовать этот пакет https://github.com/python-telegram-bot/python-telegram-bot, который поможет нам создать telegram-бота. Обязательно установите его с помощью:

pip3 install python-telegram-bot

После установки вставьте этот код в файл telegram-bot.py:

import logging
import os
from telegram import Update
from telegram.ext import (ApplicationBuilder, CommandHandler, ContextTypes,
MessageHandler, filters)

logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
TELEGRAM_API_TOKEN = os.getenv("TELEGRAM_API_TOKEN")

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!")

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)

if __name__ == '__main__':
application = ApplicationBuilder().token(TELEGRAM_API_TOKEN).build()

start_handler = CommandHandler('start', start)
echo_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), echo)
application.add_handler(start_handler)
application.add_handler(echo_handler)

application.run_polling()


Продолжение

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍Разработка продвинутого GUI на Python

Сосредоточимся на создании современной среды разработки, отличающейся улучшенным пользовательским интерфейсом с общей оптимизацией дизайна для доступа и использования ее функций.

Создадим современный GUI с кнопкой для загрузки случайных изображений из рабочего каталога. В качестве основного инструмента разработки GUI будем использовать библиотеку CustomTkinter. С ее помощью создадим рабочий процесс, включая кнопку, метки, изображения и другие необходимые объекты.

Пакет CustomTkinter устанавливаем с помощью простой команды pip, как показано ниже. Библиотека CustomTkinter доступна на сайте Python Package Index.
PIP INSTALL CUSTOMTKINTER

Импорт необходимых библиотек

На этом этапе импортируем все библиотеки, которые понадобятся для создания продвинутого GUI:

- Библиотеку CustomTkinter, только что установленную с помощью команды pip.
- Библиотеку Tkinter, которую можно использовать одновременно с модулем CustomTkinter, поскольку некоторые функции являются производными друг от друга.
- Библиотеку Pillow, которая является одной из лучших библиотек Python для обработки различных типов задач, связанных с изображениями. Из библиотеки Pillow импортируем классы ImageTk и Image, что позволит обрабатывать задачи внутри GUI.

# Импортирование библиотеки CustomTkinter для создания продвинутого GUI.
import tkinter
from PIL import ImageTk, Image


Установка темы и создание фона интерфейса и последующие шаги

@pro_python_code
Почему len(list) имеет временную сложность O(1)?

Я столкнулся с простой задачей поиска дубликатов в списке, и хотя решений было много (оптимизированных и неоптимизированных), два из них привлекли мое внимание.

Первое заключалось в итерации по списку с добавлением каждого элемента в набор. Перед добавлением проверялось, присутствует ли уже данный элемент в наборе, и если да, то получался ответ.

Конечно, при таком решении мы должны были выполнять итерацию по списку, и в худшем случае пришлось бы просматривать весь список.
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
uniqueSet = set()
for i in nums:
if i in uniqueSet:
return True
else:
uniqueSet.add(i)

return False


Тогда наше решение будет зависеть от размера списка: O(n). n – количество элементов в списке.

В другом решении мы просто сравниваем длину множества списка и длину списка.
len(set(list_name)) == len(list_name)

Учитывая природу множества, которое не может содержать дубликатов, это было бы простым решением. Нам необходимо обратить внимание на функцию len(), которая использовалась для определения длины списка. Эта встроенная функция не зависит от размера списка. Независимо от того, содержит ли ваш список 1 элемент или 1000, согласно стандартной реализации Python (CPython), временная сложность равна O(1).

За счет чего это возможно?

Читать

@pro_python_code
🔥 15 самых популярных советов по Python на Stack Overflow

1. Списковое включение
Когда требуется создать новый список на основе значений существующего списка, cписковое включение обеспечивает более понятный и читаемый синтаксис. Это позволяет сделать код более читабельным и эффективным. (изображение 1.)

2. Enumerate
Когда нам нужны одновременно и индекс, и значение элементов списка, можно не создавать отдельную переменную, а воспользоваться функцией enumerate(). (изображение 2.)

3. Использование else в цикле
В Python else может использоваться вместе с циклами. Код в блоке else выполняется после завершения цикла, если только цикл не завершен оператором break. (изображение 3.)

4. Использование множеств
Множества в Python реализованы в виде хэш-таблиц, которые обеспечивают постоянную сложность тестирования принадлежности. Если необходимо проверить, существует ли элемент в большой коллекции элементов, использование множества вместо списка может быть выгодным. (изображение 4.)

5. Использование *args и **kwargs
Функции *args и **kwargs позволяют принимать переменное количество аргументов. При этом *args используется для передачи аргументов, не относящихся к ключевым словам, а **kwargs – для передачи аргументов, относящихся к ключевым словам. (изображение 5.)

📌 Далее в статье

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
latexify

Пакет Python, который генерирует математическое описание LaTeX из функций Python

https://github.com/google/latexify_py

@pro_python_code
Как узнать длительность выполнения кода в языке Python?

Оценка времени выполнения кода важна при разработке программного обеспечения. Для этого можно использовать модули.

🔵 Модуль time в Python, который предоставляет функции для работы со временем. Одна из таких функций - time.time(), которая возвращает количество секунд, прошедших с начала эпохи. Ее можно использовать для измерения времени выполнения определенного участка кода.
import time
start_time = time.time()
# Ваш код, время выполнения которого нужно измерить
end_time = time.time()
execution_time = end_time - start_time
print(f"Время выполнения: {execution_time} секунд")


🔵 Модуль timeit предназначен специально для измерения времени выполнения небольших фрагментов кода. Он предоставляет функцию timeit(), которая автоматически повторяет выполнение кода несколько раз и возвращает среднее время выполнения:
import timeit
code_to_test = """
# Код, время выполнения которого нужно измерить
"""
execution_time = timeit.timeit(code_to_test, number=1000)
print(f"Среднее время выполнения: {execution_time} секунд")


🔵 Модуль line_profiler предоставляет декоратор @profile, который можно использовать для профилирования кода и измерения выполнения каждой строки. Чтобы использовать этот декоратор, необходимо установить line_profiler с помощью pip install line_profiler:
import line_profiler
@profile
def your_function():
# Ваш код, время выполнения которого нужно измерить
pass
your_function()

Измерение времени выполнения влияет на выполнение программы, поэтому его следует использовать только для профилирования и оптимизации кода, а не включать в окончательную версию программы. Это позволит оценить производительность кода и найти места для оптимизации в целях улучшения скорости выполнения.

@pro_python_code
Please open Telegram to view this post
VIEW IN TELEGRAM