Python Hub - сборище Питонистов
1.71K subscribers
657 photos
1 video
37 files
276 links
Уголок счастья для любого питониста.

Сотрудничество или заказы: @leshunist

https://shcoder.dev - студия разработки ShcoderDevelopment

https://t.me/pythonhub_chat - чат
Download Telegram
object в Python


➡️ Синтаксис функции object

Функция object в Python не требует параметров при вызове. Она возвращает объект без функциональных особенностей, который не содержит полезных методов или атрибутов. Например, когда вы создаете объект x = object(), вызов dir(x) отобразит только базовые методы, которые являются стандартными для всех классов. Это связано с тем, что функция object является самым базовым типом.

x = object()
print(dir(x))


➡️ Случаи использования функции object

Функция object в Python обычно не используется для создания объектов, поскольку получаемый объект не имеет полезных методов. Однако она применяется в нескольких конкретных сценариях. Например, когда вам нужно создать нейтральный объект для сравнения, функция object оказывается полезной. Кроме того, она полезна, когда вы хотите реализовать истинное инкапсуляцию в Python.

➡️ Функция object и наследование

В контексте наследования функция object имеет большое значение. В Python каждый класс происходит от класса object, что делает его базовым классом для всех других классов. Даже когда класс явно не наследуется от какого-либо класса, он неявно наследуется от класса object. Таким образом, функция object играет критическую роль в механизме наследования Python, предоставляя стандартные методы и атрибуты для всех классов.

class MyClass:
pass

print(issubclass(MyClass, object)) # Вернет True, поскольку каждый класс является подклассом object
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🔺 Исследование библиотеки retrying в Python


➡️ Установка

Библиотека retrying не является встроенной библиотекой в Python, поэтому ее нужно установить отдельно. Команда pip install retrying должна быть выполнена в командной строке. После установки вы можете импортировать ее с помощью команды import retrying.

➡️ Использование

Библиотека retrying довольно проста в использовании. Основной функцией этой библиотеки является декоратор @retry, который мы можем применить к любой функции, которую мы хотим повторить. Это особенно полезно для задач, которые имеют шанс на отказ. Например, сетевые запросы могут потерпеть неудачу из-за временных сетевых проблем, и вместо того, чтобы сразу же терпеть неудачу, использование библиотеки retrying может позволить нашей программе попробовать снова. Простой пример будет выглядеть так:

from retrying import retry
@retry
def make_network_request():
# код для выполнения сетевого запроса


В этом примере, если функция make_network_request потерпит неудачу, она будет попробована снова благодаря декоратору @retry.

➡️ Преимущества

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


https://pypi.org/project/retrying/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Что выдаст код выше?
Anonymous Quiz
11%
1
8%
0
18%
5
18%
7
14%
6
21%
Error
11%
Не знаю
🤡8👍4🤔2
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Вызываем функцию rec, передавая туда значение 3.
Внутри функции идет проверка, где мы в return'e возвращаем результат n + новый вызов функции rec(n-1) —> rec(2)

Операция повторяется и мы возвращаем результат n + rec(n-1) —> n + rec(1)

Заходим заново в функцию и возвращаем n + rec(0) —> теперь после вызова сработает return 1, т.к. if проверяет что n==0.

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

n + rec(0) —> 1 + 1 —> 2
n + rec(1) —> 2 + 2 —> 4
n + rec(2) —> 3 + 4 —> 7
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Освещение модуля 'this' в Python


Модуль 'this' в Python - это встроенный модуль, который, когда импортируется, автоматически выводит 'The Zen of Python'. Это, по сути, набор правил и принципов, на которых строится разработка на Python. Они служат напоминанием о том, какой должна быть идеальная программа на Python, и хотя они не являются строгими правилами, они широко применяются и уважаются в сообществе Python.

Пример:

import this


После выполнения этого кода, вы увидите 'The Zen of Python' на вашем экране.

Попробуйте сами❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🌴 Создание бинарного дерева в Python


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

В бинарном дереве узел является основным элементом. Каждый узел имеет данные и ссылки на левого и правого потомков. В Python мы можем создать узел, определив класс Node с инициализатором, который устанавливает данные и оба потомка.

Пример кода:

class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data


➡️ Создание бинарного дерева

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

Пример кода:

root = Node(1)

root.left = Node(2)
root.right = Node(3)

root.left.left = Node(4)
root.left.right = Node(5)


➡️ Обход бинарного дерева

Обход - это процесс посещения каждого узла в дереве. Существуют различные методы обхода, включая прямой (Preorder), симметричный (Inorder) и обратный (Postorder) обход. В Python мы можем реализовать эти методы с помощью рекурсии или стеков.

Пример кода для прямого обхода:

def preorder_traversal(root):
if root:
print(root.data)
preorder_traversal(root.left)
preorder_traversal(root.right)
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Немного затянулось, сорри.
Как вы знаете (или не знаете, тогда знайте) метод .pop удаляет элемент по индексу.
Т.е. если бы мы написали, my_list.pop(1), то элемент JavaScript бы удалился из списка.

Но а что, если мы не прокинули индекс? Тогда выбирается последний элемент. В нашем случае - c#

Но почему ответ - это не список без последнего элемента.

Все дело в том, что мы принтуем не список, а результат выполнения функции .pop. В свою очередь, функция .pop возвращает удаленный элемент (последний элемент) (( C# ))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
💡 Использование модуля difflib в Python


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

➡️ Функция get_close_matches

Функция get_close_matches() используется для поиска наиболее похожих вариантов в последовательности. Это полезно, например, при реализации системы автодополнения, где нужно предложить пользователю наиболее вероятные варианты на основе его ввода.

Например:

import difflib

words = ['кот', 'собака', 'кит', 'слон']
difflib.get_close_matches('кот', words)


В этом примере функция возвращает: ['кот', 'кит'].

➡️ Функция ndiff

Функция ndiff() используется для сравнения двух последовательностей и выявления различий между ними. Она возвращает генератор, который производит строки, иллюстрирующие различия между последовательностями. Это полезно, например, при сравнении версий текстовых документов.

Например:

import difflib

str1 = "кот"
str2 = "кит"
diff = difflib.ndiff(str1, str2)
print('\\n'.join(diff))


В этом примере функция выводит:

  к
- о
+ и
т


➡️ Функция SequenceMatcher

Функция SequenceMatcher() является более общей и мощной функцией, чем ndiff(). Она позволяет сравнивать любые две последовательности и определять степень их сходства.

Например:

import difflib

str1 = "кот"
str2 = "кит"
match = difflib.SequenceMatcher(None, str1, str2)
print(match.ratio())


В этом примере функция возвращает: 0.6666666666666666, что означает, что строки совпадают на 66.67%.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Методы .isnumeric() и .isalpha() в Python


➡️ Метод .isnumeric()

Метод .isnumeric() в Python используется для проверки, содержит ли строка только числа. Если все символы в строке являются числами, этот метод возвращает значение True. В противном случае возвращается False. Этот метод очень полезен при валидации ввода данных, когда вы хотите убедиться, что пользователь ввел только числа.

str1 = '12345'
print(str1.isnumeric()) # Вывод: True

str2 = '12345abc'
print(str2.isnumeric()) # Вывод: False


➡️ Метод .isalpha()

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

str3 = 'abc'
print(str3.isalpha()) # Вывод: True

str4 = 'abc123'
print(str4.isalpha()) # Вывод: False
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🌴 Введение в двоичное дерево поиска (BST) с примерами на Python


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

➡️ Пример BST на Python

class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key

def insert(root, key):
if root is None:
return Node(key)
else:
if root.val < key:
root.right = insert(root.right, key)
else:
root.left = insert(root.left, key)
return root

def inorder(root):
if root:
inorder(root.left)
print(root.val),
inorder(root.right)

r = Node(50)
r = insert(r, 30)
r = insert(r, 20)
r = insert(r, 40)
r = insert(r, 70)
r = insert(r, 60)
r = insert(r, 80)

inorder(r)


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

➡️ Преимущества и недостатки BST

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


То есть, по сути, это сортированное дерево, поиск в котором легко выполнить, из-за того, что оно упорядочено.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🌀 Создать 2 одновременно работающих цикла в Python

➡️ Многопоточность в Python

Многопоточность - это метод, который позволяет коду выполняться параллельно. Это означает, что два или более куска кода могут работать одновременно, что делает обработку данных более эффективной. В Python для создания многопоточных программ можно использовать модуль threading. При использовании этого модуля, каждый цикл будет работать в своем собственном потоке, что позволяет им работать одновременно.

➡️ Как создать 2 одновременных цикла

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

import threading
import time

def loop1():
for i in range(10):
print('Loop 1:', i)
time.sleep(1)

def loop2():
for i in range(10):
print('Loop 2:', i)
time.sleep(1)

thread1 = threading.Thread(target=loop1)
thread2 = threading.Thread(target=loop2)

thread1.start()
thread2.start()

thread1.join()
thread2.join()import threading
import time

def loop1():
for i in range(10):
print('Loop 1:', i)
time.sleep(1)

def loop2():
for i in range(10):
print('Loop 2:', i)
time.sleep(1)

thread1 = threading.Thread(target=loop1)
thread2 = threading.Thread(target=loop2)

thread1.start()
thread2.start()

thread1.join()
thread2.join()


В этом примере два цикла выполняются одновременно, каждый в своем собственном потоке.


Попробуйте скопировать и проверить у себя самостоятельно!👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32