Когда мы пишем код на Python, часто возникает вопрос: чем отличается оператор is от оператора ==? Хотя на первый взгляд они могут показаться схожими, на самом деле выполняют разные функции.
Оператор ==: проверка значений
Оператор == используется для сравнения значений двух объектов. Если значения объектов одинаковы, оператор возвращает True. При этом тип и место в памяти объектов могут отличаться.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True — значения списков одинаковы
Здесь a и b — два разных объекта, хранящихся в разных местах памяти, но их значения идентичны, поэтому == возвращает True.
Оператор is: проверка идентичности
Оператор is проверяет, указывают ли обе переменные на один и тот же объект в памяти. Он возвращает True, если объекты занимают одно и то же место в памяти (являются тем же самым объектом).
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # False — это два разных объекта
Хотя a == b вернуло True из-за одинаковых значений, a is b вернёт False, потому что это два разных объекта, хранящихся в разных местах памяти.
Используйте ==, когда вам нужно сравнить значения объектов. Используйте is, когда важно проверить, что обе переменные ссылаются на один и тот же объект в памяти.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2❤1
List comprehensions — это элегантный и компактный способ создания списков на основе других коллекций, таких как списки, множества или словари. Они позволяют сократить и упростить код, особенно когда вам нужно создать новый список, применяя к каждому элементу какое-то преобразование или фильтрацию.
Стандартный пример List Comprehension
Представим, что у нас есть список чисел, и мы хотим получить их квадраты:
numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]
print(squares) # Вывод: [1, 4, 9, 16, 25]
Здесь x ** 2 применяется к каждому элементу numbers, и результат добавляется в новый список squares.
List Comprehensions для словарей
Та же концепция может быть применена для создания словарей. Например, создадим словарь, где ключ — это число, а значение — его квадрат:
squares_dict = {x: x ** 2 for x in range(1, 6)}
print(squares_dict) # Вывод: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
List Comprehensions для множеств
Аналогично можно создавать множества.
Например, возьмем уникальные квадраты чисел из списка:
unique_squares = {x ** 2 for x in numbers}
print(unique_squares) # Вывод: {1, 4, 9, 16, 25}
Чем удобен List Comprehension?
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Что выведет данный код?
Anonymous Quiz
13%
[1, 2, 3, 4, 5]
38%
Код вызовет синтаксическую ошибку
38%
[2, 2, 6, 8, 10]
13%
[2, 4, 6, 8, 10]
👨💻2
Декораторы — это мощный инструмент Python, позволяющий изменять поведение функций или методов без изменения их кода. Декораторы действуют как "обёртки", добавляя дополнительную функциональность к уже существующим функциям.
Декораторы широко используются, например, для логирования, кэширования, контроля доступа и других задач.
Пример простого декоратора:
def my_decorator(func):
def wrapper():
print("Перед выполнением функции.")
func()
print("После выполнения функции.")
return wrapper
@my_decorator
def say_hello():
print("Привет!")
say_hello()
Что происходит:
Функция my_decorator принимает в аргументы say_hello и оборачивает её в функцию wrapper.Когда вызывается say_hello(), сначала выполняется код перед вызовом, потом сама функция, и в конце — код после вызова.
Вывод:
Перед выполнением функции.
Привет!
После выполнения функции.
Фреймворки: В веб-фреймворках (например, Flask, Django) декораторы используются для обработки маршрутов, проверки прав доступа и других задач.
Тестирование: В тестировании часто используются декораторы для подготовки или очистки тестовых окружений.
Асинхронное программирование: Декораторы помогают "оборачивать" обычные функции в асинхронные.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2👍1
Объектно-ориентированное программирование (ООП) — это подход к программированию, который строится вокруг объектов. Каждый объект в ООП содержит данные (называемые атрибутами) и функции для работы с этими данными (называемые методами). Python поддерживает ООП, что позволяет писать гибкий и структурированный код.
Структурировать код: Упрощает управление большими проектами, так как позволяет организовать данные и логику в одном месте — внутри объектов.
Повторно использовать код: Понятие наследования позволяет создать общие шаблоны (классы) и расширять их для специфических задач.
Работать с реальными сущностями: ООП позволяет моделировать реальные объекты и взаимодействия между ними.
Класс: Шаблон для создания объектов. Класс определяет, какие атрибуты и методы будет иметь объект.
Пример: класс Car может описывать атрибуты (цвет, модель) и методы (ездить, тормозить).Объект: Экземпляр класса, представляющий конкретную сущность.
class Car:
def __init__(self, brand, color):
self.brand = brand # Атрибуты
self.color = color
def drive(self): # Метод
print(f"{self.color} {self.brand} едет!")
# Создаем объект (экземпляр класса)
my_car = Car("Tesla", "красная")
my_car.drive() # Вывод: красная Tesla едет!
В этом примере:
Car — это класс, который описывает автомобиль.
Метод init() — это конструктор, который вызывается при создании объекта, чтобы инициализировать атрибуты объекта.drive() — метод, который выполняет действие "ехать".
ООП в Python помогает писать код, который легко расширять, поддерживать и использовать повторно. С его помощью вы можете строить сложные системы, разбивая их на более мелкие и понятные части.
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Что выведет данный код?
Anonymous Quiz
14%
[1, 2, 3, 4, 5]
0%
Код вызовет синтаксическую ошибку
57%
[1, 3, 3, 4, 5]
29%
[3, 2, 3, 4, 5]
👨💻3
Python предлагает широкий набор типов данных, которые позволяют хранить и обрабатывать разную информацию. Все типы данных делятся на изменяемые и неизменяемые.
Числа: Целые числа (int), Числа с плавающей точкой (float)
Строки (str): Последовательность символов, представляющая текст (например, "Hello, World!")
Кортежи (tuple): Похожи на списки, но неизменяемые (например, (1, 2, 3))
Списки (list): Последовательность элементов, которая может содержать объекты разных типов (например, [1, 2, "hello"])
Множества (set): Набор уникальных элементов (например, {1, 2, 3}). Порядок элементов не гарантируется.
Словари (dict): Набор пар "ключ: значение" (например, {"name": "Alice", "age": 25}).
Строки: Подходят для хранения и обработки текста, сообщений, логов
Списки: Идеальны для хранения изменяемых последовательностей данных. Например, список товаров, чисел или пользователей.
Кортежи: Подходят, когда данные не должны изменяться. Например, координаты или настройки, которые должны быть неизменны.
Множества: Удобны для хранения уникальных элементов и быстрых проверок наличия элементов.
Словари: Полезны, когда нужно хранить данные в виде пар "ключ: значение".
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Что выведет данный код?
Anonymous Quiz
13%
hello
75%
hollo
13%
Код выведет пустую строку
0%
Код вызовет синтаксическую ошибку
👨💻2👍1
Магические методы (или "специальные методы") — это особые методы в Python, которые начинаются и заканчиваются двойным подчеркиванием (например, init, str).
Они позволяют вам определять поведение объектов ваших классов при выполнении стандартных операций, таких как:
Инициализация (init)
Сравнение (eq, lt)
Арифметические операции (add, sub)
Преобразование в строку (str, repr)
Итерация (iter, next)
Давайте разберем на примере, как магические методы могут определять поведение экземпляра класса (далее ЭК):
class Car:
def __init__(self, car_model): # описываем поведение ЭК с аргументами
self.car_model = car_model # присваиваем ЭК переданный аргумент
def __str__(self): # описываем поведение при функции print
return f'Модель автомобиля - {self.car_model}'
def __call__(self): # описываем поведение ЭК при его вызове
print(f'Вы завели автомобиль')
car = Car('Tesla')
print(car) # Модель автомобиля - Tesla
car() # Вы завели автомобиль
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2
iter(): Возвращает сам итератор
next(): Возвращает следующий элемент последовательности или вызывает исключение StopIteration, когда элементы заканчиваются.
Пример создания итератора:
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
self.current += 1
return self.current - 1
my_iter = MyIterator(0, 3)
for num in my_iter:
print(num) # 1 2
Пример генератора:
def my_generator(start, end):
while start < end:
yield start
start += 1
for num in my_generator(0, 3):
print(num) # 1 2
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Наследование позволяет создавать новые классы на основе уже существующих, заимствуя у них функционал и добавляя новый. Класс, который наследует другой класс, называется дочерним (или подклассом), а класс, от которого идёт наследование, — родительским (или базовым).
Дочерний класс наследует все методы и атрибуты родительского класса. Это значит, что дочерний класс может использовать методы и атрибуты родительского класса без их повторного объявления.
class Animal:
def move(self):
print("Животное двигается")
class Dog(Animal):
def bark(self):
print("Собака лает")
dog = Dog()
dog.move() # Животное двигается
Здесь Dog наследует поведение от Animal, но может также иметь свои собственные методы, как bark().
Повторное использование кода: Вместо того чтобы писать одинаковый код для нескольких классов, можно вынести общую логику в родительский класс и наследовать её.
Упрощение структуры программы: Наследование позволяет организовать классы в иерархическую структуру, что делает код более логичным и структурированным.
Расширяемость: Дочерние классы могут переопределять или расширять функционал родительского класса, адаптируя его под свои нужды.
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2
К какому типу данных принадлежит переменная hundred?
Anonymous Quiz
17%
str (строка)
0%
tuple (кортеж)
50%
int (число)
33%
Код выдаст ошибку, переменную таким образом создавать нельзя
👨💻3
Когда возникает ошибка, Python генерирует исключение. Если это исключение не обработано, программа завершится с ошибкой. Блоки try-except позволяют вам "ловить" такие ошибки и обрабатывать их, не прерывая выполнение программы.
try и except?В блоке try помещается код, который может вызвать ошибку. Если ошибка возникает, программа переходит в блок except, где вы можете её обработать.
try:
result = 10 / 0
except ZeroDivisionError as error:
print("Ошибка: деление на ноль невозможно")
print(f"Пойманная ошибка - {error}") # python позволяет поместить пойманную ошибку в переменную
В этом примере, когда возникает ошибка ZeroDivisionError (деление на ноль), программа не завершится с аварией, а перейдёт к блоку except и выведет сообщение.
try:
# кусок кода, который может вызвать ошибку
except:
# код зайдет в блок except при любом искючении
Блок
finally выполняется всегда, независимо от того, произошло исключение или нет. Он используется для выполнения завершающих действий, таких как освобождение ресурсов, закрытие файлов или завершение операций, которые должны быть выполнены в любом случае. Блок
else выполняется только если ошибок не возникло в блоке try. Это полезно, когда нужно выполнить действия, которые зависят от успешного выполнения кода в блоке try, но они сами по себе не должны обрабатываться в блоке except.#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2
Что выведет данный код?
Anonymous Quiz
0%
3
17%
Код выведет ошибку ValueError
33%
Код выведет ошибку list index out of range
50%
Try-except не работает без блока finally
👨💻1
x = 10
y = 20
print(f"Сумма {x} и {y} равна {x + y}") # Сумма 10 и 20 равна 30
name = "PyCode"
age = 5
# Старый метод format
formatted_string = "Привет, {0}, тебе {1} лет.".format(name, age)
# f-строка
formatted_string = f"Привет, {name}, тебе {age} лет."
С f-строками нет необходимости отслеживать порядок подстановок — код становится более читаемым и интуитивным.
Округление чисел: Можно легко управлять форматированием чисел прямо в f-строке.
pi = 3.14159
print(f"Число π: {pi:.2f}") # Вывод: Число π: 3.14
Вызов функций: Внутри f-строки можно вызывать функции и методы.
name = "pycode"
print(f"Имя в верхнем регистре: {name.upper()}") # Вывод: Имя в верхнем регистре: PYCODE
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2
