🚀 Контекстные менеджеры
Суть темы:
Контекстные менеджеры позволяют управлять ресурсами, такими как файлы или сетевые соединения, с помощью ключевого слова with. Это гарантирует, что ресурсы будут правильно освобождены после использования.
Применение:
Работа с файлами.
Управление сетевыми соединениями.
Обеспечение корректного завершения транзакций.
Пример кода:
Суть темы:
Контекстные менеджеры позволяют управлять ресурсами, такими как файлы или сетевые соединения, с помощью ключевого слова with. Это гарантирует, что ресурсы будут правильно освобождены после использования.
Применение:
Работа с файлами.
Управление сетевыми соединениями.
Обеспечение корректного завершения транзакций.
Пример кода:
with open('file.txt', 'r') as file:
content = file.read()
print(content)
👍2❤1🔥1
Дескрипторы и свойства
Суть темы:
Дескрипторы и свойства позволяют контролировать доступ к атрибутам класса. Это полезно для создания более гибких и безопасных объектов.
Применение:
Валидация данных при установке значений атрибутов.
Ленивая загрузка данных.
Создание вычисляемых атрибутов.
Пример кода:
Суть темы:
Дескрипторы и свойства позволяют контролировать доступ к атрибутам класса. Это полезно для создания более гибких и безопасных объектов.
Применение:
Валидация данных при установке значений атрибутов.
Ленивая загрузка данных.
Создание вычисляемых атрибутов.
Пример кода:
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
@property
def fahrenheit(self):
return self.celsius * 9/5 + 32
@fahrenheit.setter
def fahrenheit(self, value):
self.celsius = (value - 32) * 5/9
temp = Temperature(0)
print(temp.fahrenheit) # Вывод: 32.0
temp.fahrenheit = 100
print(temp.celsius) # Вывод: 37.777...
🔥2❤1👍1
Работа с базами данных (ORM и SQLAlchemy)
Суть темы:
ORM (Object-Relational Mapping) позволяет работать с базами данных, используя объекты Python, вместо написания SQL-запросов вручную. SQLAlchemy — одна из самых популярных библиотек для работы с базами данных в Python.
Применение:
Упрощение работы с базами данных.
Создание сложных запросов с помощью Python-кода.
Поддержка различных СУБД (PostgreSQL, MySQL, SQLite и др.).
Пример кода:
Суть темы:
ORM (Object-Relational Mapping) позволяет работать с базами данных, используя объекты Python, вместо написания SQL-запросов вручную. SQLAlchemy — одна из самых популярных библиотек для работы с базами данных в Python.
Применение:
Упрощение работы с базами данных.
Создание сложных запросов с помощью Python-кода.
Поддержка различных СУБД (PostgreSQL, MySQL, SQLite и др.).
Пример кода:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()
👍2🔥2❤1
Создание и использование контекстных менеджеров с contextlib 🛠️🔧
Суть темы:
Контекстные менеджеры — это мощный инструмент в Python, который позволяет управлять ресурсами, такими как файлы, сетевые соединения или блокировки, с помощью ключевого слова with. 🗝️
Модуль contextlib предоставляет удобные инструменты для создания собственных контекстных менеджеров без необходимости писать полноценный класс с методами enter и exit. 🎩
Применение:
Управление ресурсами, такими как файлы или сетевые соединения. 📂🌐
Обеспечение корректного завершения транзакций. 💾
Упрощение работы с временными изменениями состояния. 🕒
Пример кода:
Суть темы:
Контекстные менеджеры — это мощный инструмент в Python, который позволяет управлять ресурсами, такими как файлы, сетевые соединения или блокировки, с помощью ключевого слова with. 🗝️
Модуль contextlib предоставляет удобные инструменты для создания собственных контекстных менеджеров без необходимости писать полноценный класс с методами enter и exit. 🎩
Применение:
Управление ресурсами, такими как файлы или сетевые соединения. 📂🌐
Обеспечение корректного завершения транзакций. 💾
Упрощение работы с временными изменениями состояния. 🕒
Пример кода:
from contextlib import contextmanager
@contextmanager
def open_file(name, mode):
f = open(name, mode)
try:
yield f
finally:
f.close()
# Использование контекстного менеджера
with open_file('test.txt', 'w') as f:
f.write('Привет, мир!')
👍2❤1🔥1
Хеширование паролей с hashlib 🔑
Модуль hashlib позволяет создавать хеши данных, таких как пароли.
Применение:
Защита паролей
Проверка целостности данных
Результат выполнения:
Модуль hashlib позволяет создавать хеши данных, таких как пароли.
Применение:
Защита паролей
Проверка целостности данных
import hashlib
password = "my_secret_password"
hashed_password = hashlib.sha256(password.encode()).hexdigest()
print("Хеш пароля:", hashed_password)
Результат выполнения:
Хеш пароля: 6e6bc4e49dd477ebc98ef4046c067b5f2b0e6e2d2c7e4d3c6c34395f2b1ac540
👍2
Работа с байткодом и модулем dis 🧩🔍
Суть темы:
Python компилирует исходный код в байткод, который затем выполняется виртуальной машиной Python. 🖥️ Модуль dis позволяет дизассемблировать байткод и увидеть, как Python интерпретирует ваш код на низком уровне. 🕵️♂️
Применение:
Оптимизация производительности кода. ⚡
Понимание внутреннего устройства Python. 🧠
Отладка и анализ работы кода. 🛠️
Пример кода:
Вывод:
Почему это круто?
Модуль dis позволяет заглянуть "под капот" Python и понять, как работает ваш код. 🚗
Это полезно для оптимизации и отладки сложных участков кода. 🛠️
Суть темы:
Python компилирует исходный код в байткод, который затем выполняется виртуальной машиной Python. 🖥️ Модуль dis позволяет дизассемблировать байткод и увидеть, как Python интерпретирует ваш код на низком уровне. 🕵️♂️
Применение:
Оптимизация производительности кода. ⚡
Понимание внутреннего устройства Python. 🧠
Отладка и анализ работы кода. 🛠️
Пример кода:
import dis
def example_function(x):
return x * x + 1
dis.dis(example_function)
Вывод:
2 0 LOAD_FAST 0 (x)
2 LOAD_FAST 0 (x)
4 BINARY_MULTIPLY
6 LOAD_CONST 1 (1)
8 BINARY_ADD
10 RETURN_VALUE
Почему это круто?
Модуль dis позволяет заглянуть "под капот" Python и понять, как работает ваш код. 🚗
Это полезно для оптимизации и отладки сложных участков кода. 🛠️
🔥1
Создание и использование дескрипторов 🛠️🔧
Суть темы:
Дескрипторы — это мощный инструмент в Python, который позволяет управлять доступом к атрибутам класса. 🎩 Они используются для создания свойств, которые могут выполнять дополнительные действия при доступе или изменении значения. 🛠️
Применение:
Валидация данных при установке значений атрибутов. ✅
Ленивая загрузка данных. 🕒
Пример кода:
Вывод:
Почему это круто?
Дескрипторы позволяют создавать более гибкие и безопасные объекты. 🛡️
Они делают код более читаемым и удобным для повторного использования. 📖
Суть темы:
Дескрипторы — это мощный инструмент в Python, который позволяет управлять доступом к атрибутам класса. 🎩 Они используются для создания свойств, которые могут выполнять дополнительные действия при доступе или изменении значения. 🛠️
Применение:
Валидация данных при установке значений атрибутов. ✅
Ленивая загрузка данных. 🕒
Пример кода:
class Descriptor:
def __get__(self, instance, owner):
print("Получение значения")
return instance._value
def __set__(self, instance, value):
print("Установка значения")
instance._value = value
class MyClass:
attribute = Descriptor()
obj = MyClass()
obj.attribute = 10 # Установка значения
print(obj.attribute) # Получение значения
Вывод:
Установка значения
Получение значения
10
Почему это круто?
Дескрипторы позволяют создавать более гибкие и безопасные объекты. 🛡️
Они делают код более читаемым и удобным для повторного использования. 📖
Создание и использование пользовательских исключений 🚨🛠️
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
class NegativeNumberError(Exception):
"""Исключение, которое выбрасывается, если число отрицательное."""
def __init__(self, value):
self.value = value
super().__init__(f"Отрицательное число недопустимо: {value}")
def check_positive(number):
if number < 0:
raise NegativeNumberError(number)
return number
try:
check_positive(-10)
except NegativeNumberError as e:
print(e) # Вывод: Отрицательное число недопустимо: -10
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
👍2
Работа с регулярными выражениями (модуль re) 🔍✨
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
import re
# Поиск email-адресов в тексте
text = "Свяжитесь с нами по email: support@example.com или info@example.org."
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(emails) # Вывод: ['support@example.com', 'info@example.org']
# Замена текста по шаблону
new_text = re.sub(r'\d{2}-\d{2}-\d{4}', 'ДД-ММ-ГГГГ', 'Дата: 12-05-2023')
print(new_text) # Вывод: Дата: ДД-ММ-ГГГГ
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
🔥1
Работа с лямбда-функциями и функциями высшего порядка 🎯✨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
# Лямбда-функция для сложения двух чисел
add = lambda x, y: x + y
print(add(5, 3)) # Вывод: 8
# Использование лямбда-функции с map
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Вывод: [1, 4, 9, 16]
# Использование лямбда-функции с filter
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Вывод: [2, 4]
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
🔥1
Работа с модулем collections 🧩📚
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
from collections import Counter, namedtuple, deque
# Использование Counter для подсчета элементов
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(data)
print(count) # Вывод: Counter({'apple': 3, 'banana': 2, 'orange': 1})
# Использование namedtuple для создания именованных кортежей
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y) # Вывод: 10 20
# Использование deque для управления порядком элементов
d = deque([1, 2, 3])
d.appendleft(0)
d.append(4)
print(d) # Вывод: deque([0, 1, 2, 3, 4])
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
🔥2
Работа с модулем itertools 🔄✨
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
import itertools
# Генерация всех возможных комбинаций
combinations = list(itertools.combinations('ABC', 2))
print(combinations) # Вывод: [('A', 'B'), ('A', 'C'), ('B', 'C')]
# Генерация бесконечного итератора
count = itertools.count(start=10, step=2)
for _ in range(5):
print(next(count)) # Вывод: 10, 12, 14, 16, 18
# Цепочка итераторов
chain = itertools.chain('ABC', 'DEF')
print(list(chain)) # Вывод: ['A', 'B', 'C', 'D', 'E', 'F']
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
Работа с модулем functools 🛠️✨
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
from functools import partial, lru_cache
# Создание частичной функции
def multiply(x, y):
return x * y
double = partial(multiply, 2)
print(double(5)) # Вывод: 10
# Мемоизация результатов функции
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Вывод: 55
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
🕵️♂️ Однострочный swap переменных без временной переменной
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
Результат:
🔥 Без лишнего кода и лишних переменных!
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
a, b = 5, 10
a, b = b, a # Магия кортежей!
print(a, b)
Результат:
10 5
🔥 Без лишнего кода и лишних переменных!
🔥3
🎭 "Секретные" подчеркивания в Python
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
Результат (сокращенно):
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
>>> 10 + 5
15
>>> _ * 2 # Используем результат предыдущей операции
30
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
for _ in range(3):
print("Hello!") # Повторит 3 раза, но переменная нам не нужна
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
class Example:
def __init__(self):
self.__secret = "Не трогай меня!"
obj = Example()
print(dir(obj)) # Смотрим атрибуты, Python спрятал переменную!
Результат (сокращенно):
['_Example__secret', '__class__', ...]
🔥3
🐍 Генераторы и их "волшебная" экономия памяти
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
Результат:
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
def my_generator():
for i in range(5):
yield i
gen = my_generator()
print(next(gen)) # 0
print(next(gen)) # 1
Результат:
0
1
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
🔥2
🔄 zip() — идеальный способ для параллельного обхода нескольких списков
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
Результат:
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
Результат:
Alice scored 85
Bob scored 90
Charlie scored 78
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
🔥1
🚀 Крутая фишка enumerate() — избавляемся от лишних счетчиков!
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
Результат:
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
fruits = ["🍎 Apple", "🍌 Banana", "🍒 Cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
Результат:
1. 🍎 Apple
2. 🍌 Banana
3. 🍒 Cherry
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
🔥2
🎲 Случайный выбор из списка с random.choice()
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
Результат (например):
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
import random
movies = ["🎬 Inception", "🎥 Interstellar", "📽 The Matrix", "🎞 The Dark Knight"]
random_movie = random.choice(movies)
print(f"Сегодня стоит посмотреть: {random_movie}")
Результат (например):
Сегодня стоит посмотреть: 🎞 The Dark Knight
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
🔥3
⏳ Как засечь время выполнения кода? timeit в помощь!
Хотите узнать, сколько времени занимает выполнение кода? Python предлагает удобный модуль timeit, который точно измеряет производительность.
💡 Пример использования:
Результат (пример):
🔥 Зачем использовать timeit?
Точнее, чем time.time(), так как выполняет код многократно
Удобен для оптимизации алгоритмов
Хотите узнать, сколько времени занимает выполнение кода? Python предлагает удобный модуль timeit, который точно измеряет производительность.
💡 Пример использования:
import timeit
code = """
result = [x**2 for x in range(1000)]
"""
execution_time = timeit.timeit(code, number=1000)
print(f"Время выполнения: {execution_time:.5f} секунд")
Результат (пример):
Время выполнения: 0.08523 секунд
🔥 Зачем использовать timeit?
Точнее, чем time.time(), так как выполняет код многократно
Удобен для оптимизации алгоритмов
❤2🔥1
🔥 Расширенный print() — настраивай вывод под себя!
Функция print() в Python может намного больше, чем просто выводить текст. Можно менять разделитель и конец строки!
💡 Пример 1: Задаем кастомный разделитель (sep)
Результат:
💡 Пример 2: Изменяем конец строки (end)
Результат:
🎯 Когда это полезно?
sep удобно использовать для форматирования вывода
end помогает избежать лишних переводов строк
Теперь print() — это не просто вывод, а гибкий инструмент! 🚀
Функция print() в Python может намного больше, чем просто выводить текст. Можно менять разделитель и конец строки!
💡 Пример 1: Задаем кастомный разделитель (sep)
print("Python", "is", "awesome", sep="🔥")
Результат:
Python🔥is🔥awesome
💡 Пример 2: Изменяем конец строки (end)
print("Первая строка", end=" 😎 ")
print("Вторая строка")
Результат:
Первая строка 😎 Вторая строка
🎯 Когда это полезно?
sep удобно использовать для форматирования вывода
end помогает избежать лишних переводов строк
Теперь print() — это не просто вывод, а гибкий инструмент! 🚀
🔥1