🔮 В мире Python существует функция
Представьте себе, что вы устраиваете вечеринку и хотите собрать всех друзей в круг.
🔮 Давайте посмотрим, как это работает на практике:
🔝 В результате этого кода мы получим строку: "Привет мир я 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 возвращает строку, которая может содержать больше технической информации и может использоваться для воссоздания объекта.
Примеры реализации обоих методов:
Таким образом, метод str возвращает понятное для пользователя строковое представление объекта, используемое функцией str() и print(), в то время как метод repr возвращает официальное строковое представление объекта, используемое функцией repr() и интерактивной оболочкой Python, и часто предназначен для отладки.
Спросят с вероятностью 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, и часто предназначен для отладки.
Что выведет код?
Anonymous Poll
30%
{float: 3.14, str: 'Pi'}
30%
{<class 'float'>: 3.14, <class'str'>: 'Pi'}
10%
{: 3.14, : 'Pi'}
30%
Ошибку
🖥 Что означает some-variable ?
Двойное подчеркивание перед и после имени переменной в Python называется
Также могут использоваться "dunder" атрибуты, такие как name, module, doc, file, dict, class, all и другие, которые предоставляют информацию о модуле, классе, функции или другом объекте.
Значение, которое присваивается такой переменной, зависит от контекста использования.
Например,
Обычно используйте двойное подчеркивание только для специальных методов и атрибутов, которые имеют специальный смысл в языке Python, и не используйте такие имена для своих собственных переменных, чтобы избежать конфликтов и неожиданного поведения
Двойное подчеркивание перед и после имени переменной в Python называется
"dunder" (Double underscore)
и используется для специальных методов и атрибутов, которые могут быть вызваны автоматически. Например, init - это специальный метод, который вызывается при создании экземпляра класса. Другие примеры включают str, len, call, iter, и так далее.Также могут использоваться "dunder" атрибуты, такие как name, module, doc, file, dict, class, all и другие, которые предоставляют информацию о модуле, классе, функции или другом объекте.
Значение, которое присваивается такой переменной, зависит от контекста использования.
Например,
name
- это специальный атрибут, который содержит имя текущего модуля.Обычно используйте двойное подчеркивание только для специальных методов и атрибутов, которые имеют специальный смысл в языке Python, и не используйте такие имена для своих собственных переменных, чтобы избежать конфликтов и неожиданного поведения
🔎Иногда, при разработке программного обеспечения на Python, мы можем столкнуться с ситуациями, когда необходимо явно указать на наличие ошибки.
➡️Когда мы пишем программы, мы стараемся их делать максимально надежными и безопасными. Однако, иногда может возникнуть ситуация, когда мы хотим явно указать на наличие проблемы. Например, если в функции передаются некорректные аргументы или программа не может продолжить выполнение из-за некорректного состояния
➡️Использование оператора raise
Оператор raise в Python позволяет нам создавать исключения вручную. Мы можем указать тип исключения и дополнительное сообщение, которое будет содержаться в исключении.
➡️Вот пример использования оператора raise:
➡️Когда мы пишем программы, мы стараемся их делать максимально надежными и безопасными. Однако, иногда может возникнуть ситуация, когда мы хотим явно указать на наличие проблемы. Например, если в функции передаются некорректные аргументы или программа не может продолжить выполнение из-за некорректного состояния
➡️Использование оператора 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 используется для измерения времени выполнения вашего кода. У него есть как интерфейс командной строки, так и вызываемый интерфейс. Модуль выполнит оператор определенное количество раз (по умолчанию - один миллион) и затем вернет время, затраченное на выполнение. Вот простой пример:
⬆️Этот код выполнит оператор
➡️Использование Timeit с функциями
Вы также можете использовать модуль timeit для измерения времени выполнения функций. Вот пример:
⬆️В этом примере мы сначала определяем функцию с именем my_function. Затем мы измеряем время выполнения этой функции 10 000 раз и выводим результат
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:
⬆️ В этом примере показано создание простого CLI-приложения с двумя командами: "hello" и "goodbye". Команда "hello" принимает один аргумент — имя, и выводит приветствие. Команда "goodbye" принимает имя и опциональный аргумент "formal", который определяет, будет ли прощание формальным.
Применение 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): нельзя изменить после создания
✅
🔹 Изменяемые (mutable): можно изменять без создания нового объекта
✅
⚠️ Важный нюанс
Передача изменяемых объектов в функцию может привести к неожиданным изменениям:
✅ Вывод:
В 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()
.↔️ Разница между
🔹
🔹
🔹 Но для immutable-объектов (например,
✅ Используйте
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
для проверки, ссылаются ли переменные на один объект в памяти!