🐍 Укус питона 🐍
2.75K subscribers
868 photos
5 videos
282 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
🔮 В мире Python существует функция str.join(), которая действительно похожа на волшебную палочку, объединяющую слова, фразы или элементы списка в одну большую строку.

Представьте себе, что вы устраиваете вечеринку и хотите собрать всех друзей в круг. str.join() — это как магия, которая собирает всех вместе!

🔮 Давайте посмотрим, как это работает на практике:

# Допустим, у нас есть список слов
words = ["Привет", "мир", "я", "Python"]

# И мы хотим объединить их в предложение
sentence = ' '.join(words)
print(sentence)


🔝 В результате этого кода мы получим строку: "Привет мир я Python".

🔮 Как это работает?

join() берет список (в нашем случае words) и использует пробел ' ' в качестве "клея", чтобы соединить все слова в одну строку. Таким образом, каждый элемент списка становится частью большой строки, разделенной пробелами или любым другим символом, который мы укажем перед join().

🔮 Еще один пример:

users = ["RimMirK", "Anuke", "compuser"]

result = ', '.join(users)
print(result) # "RimMirK, Anuke, compuser"


🔝 Здесь мы соединили пользователей через запятую.

Таким образом, функция str.join() предоставляет удобный способ объединения элементов списка в одну строку, используя указанный разделитель.
разница между методами str и repr ?
Спросят с вероятностью 3%

Метод str:
- Цель: Возвращает строковое представление объекта, понятное и удобное для пользователя.
- Использование: Вызывается функцией str() и при использовании print().
- Предназначение: Для более дружественного и читаемого представления объекта.

Метод repr:
- Цель: Возвращает строку, представляющую объект официально и, по возможности, позволяющую воссоздать объект при передаче этой строки в eval().
- Использование: Вызывается функцией repr() и отображается интерактивной оболочкой Python для представления объектов.
- Предназначение: Для более точного и детализированного представления объекта, предназначенного для разработчиков.

Основные различия:
1. Контекст использования:
- str предназначен для удобного представления объекта пользователю.
- repr предназначен для официального представления объекта, полезного для отладки и разработки.

2. Вызываемые функции:
- str() и print() используют str.
- repr() и интерактивная оболочка Python используют repr.

3. Содержимое строки:
- str возвращает удобочитаемую строку.
- repr возвращает строку, которая может содержать больше технической информации и может использоваться для воссоздания объекта.

Примеры реализации обоих методов:

class Point:
def init(self, x, y):
self.x = x
self.y = y

def str(self):
return f"Point({self.x}, {self.y})"

def repr(self):
return f"Point({self.x}, {self.y})"

p = Point(1, 2)

# Использование str

print(str(p))  # Выведет: Point(1, 2)
print(p) # Выведет: Point(1, 2)

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

 repr

print(repr(p)) # Выведет: Point(1, 2)


Таким образом, метод str возвращает понятное для пользователя строковое представление объекта, используемое функцией str() и print(), в то время как метод repr возвращает официальное строковое представление объекта, используемое функцией repr() и интерактивной оболочкой Python, и часто предназначен для отладки.
🖥 Что означает some-variable ?

Двойное подчеркивание перед и после имени переменной в Python называется "dunder" (Double underscore) и используется для специальных методов и атрибутов, которые могут быть вызваны автоматически. Например, init - это специальный метод, который вызывается при создании экземпляра класса. Другие примеры включают str, len, call, iter, и так далее.

Также могут использоваться "dunder" атрибуты, такие как name, module, doc, file, dict, class, all и другие, которые предоставляют информацию о модуле, классе, функции или другом объекте.

Значение, которое присваивается такой переменной, зависит от контекста использования.

Например, name - это специальный атрибут, который содержит имя текущего модуля.

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

➡️Когда мы пишем программы, мы стараемся их делать максимально надежными и безопасными. Однако, иногда может возникнуть ситуация, когда мы хотим явно указать на наличие проблемы. Например, если в функции передаются некорректные аргументы или программа не может продолжить выполнение из-за некорректного состояния

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

Оператор raise в Python позволяет нам создавать исключения вручную. Мы можем указать тип исключения и дополнительное сообщение, которое будет содержаться в исключении.

➡️Вот пример использования оператора raise:

def divide_numbers(a, b):
if b == 0:
raise ValueError("Делитель не может быть нулем")
return a / b

try:
result = divide_numbers(10, 0)
print("Результат:", result)
except ValueError as e:
print("Ошибка:", str(e))
✈️Модуль timeit в Python используется для измерения времени выполнения вашего кода. У него есть как интерфейс командной строки, так и вызываемый интерфейс. Модуль выполнит оператор определенное количество раз (по умолчанию - один миллион) и затем вернет время, затраченное на выполнение. Вот простой пример:

import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))


⬆️Этот код выполнит оператор "-".join(str(n) for n in range(100)) 10 000 раз и выведет затраченное на это время.

➡️Использование Timeit с функциями

Вы также можете использовать модуль timeit для измерения времени выполнения функций. Вот пример:

import timeit
def my_function():
return "-".join(str(n) for n in range(100))
print(timeit.timeit(my_function, number=10000))


⬆️В этом примере мы сначала определяем функцию с именем my_function. Затем мы измеряем время выполнения этой функции 10 000 раз и выводим результат
В Python typer — это современная и удобная библиотека для создания CLI-приложений (интерфейсов командной строки).

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

пример использования typer:

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()


⬆️ В этом примере показано создание простого CLI-приложения с двумя командами: "hello" и "goodbye". Команда "hello" принимает один аргумент — имя, и выводит приветствие. Команда "goodbye" принимает имя и опциональный аргумент "formal", который определяет, будет ли прощание формальным.
🔥 Mutable vs Immutable в Python

В Python все данные — это объекты, и они делятся на изменяемые (mutable) и неизменяемые (immutable).

🔹 Неизменяемые (immutable): нельзя изменить после создания
int, float, str, tuple, frozenset
x = "hello"
x += " world" # Создается новый объект, а не изменяется старый


🔹 Изменяемые (mutable): можно изменять без создания нового объекта
list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Список изменяется в той же области памяти


⚠️ Важный нюанс

Передача изменяемых объектов в функцию может привести к неожиданным изменениям:

def modify_list(lst):
lst.append(99) # Изменяет оригинальный список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


Вывод:

Используйте tuple, если данные не должны изменяться.
Будьте осторожны с изменяемыми объектами при передаче в функции.
Если нужно копирование, используйте .copy() или deepcopy().
↔️ Разница между is и == в Python

🔹 == (равенство) проверяет, равны ли значения объектов:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значения одинаковые)


🔹 is (идентичность) проверяет, указывают ли переменные на один и тот же объект в памяти:
print(a is b)  # False (разные объекты)


🔹 Но для immutable-объектов (например, int, str, tuple) Python кеширует значения:
x = 256
y = 256
print(x is y) # True (указывают на один объект)


Используйте == для сравнения значений и is для проверки, ссылаются ли переменные на один объект в памяти!