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
enumerate(). Этот метод возвращает пару: индекс и элемент, упрощая работу с циклами.Пример:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
Вывод:
0: apple
1: banana
2: cherry
#PyTips
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Что выведет данный код?
Anonymous Quiz
33%
Код будет выполнять, пока не кончится оперативная память
50%
Код выдаст ошибку рекурсии
17%
Код не запустится
0%
Функции вызовут друг друга один раз
Разберём основные виды: позиционные, именованные, а также специальные аргументы *args и **kwargs (но их разберем чуть позже).
Это аргументы, которые передаются в функцию в определённом порядке. Важно, чтобы порядок их следования совпадал с порядком, в котором они указаны в определении функции.
def greet(name, age):
print(f"Привет, {name}! Тебе {age} лет.")
greet('Alex', 25) # Позиционные аргументы
Здесь, 'Alex' передаётся параметру name, а 25 — параметру age. Если поменять порядок аргументов при вызове функции, результат будет некорректным.
Именованные аргументы позволяют явно указывать, какому параметру соответствует передаваемое значение. Это особенно полезно, когда у функции много параметров, или вы хотите передать значения не в порядке их объявления.
print(f"Привет, {name}! Тебе {age} лет.")
pythongreet(age=25, name='Alex')
В данном случае порядок передачи не важен, так как каждый аргумент явно сопоставляется с именем параметра.
Если вы хотите сделать какой-то аргумент необязательным, можно задать для него значение по умолчанию. Тогда, если при вызове функции этот аргумент не будет указан, будет использовано значение по умолчанию.
def greet(name, age=30):
print(f"Привет, {name}. Тебе {age} лет.")
greet('Alex') # age будет 30 по умолчанию
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Пример:
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}")
Вывод:
Alice: 85
Bob: 92
Charlie: 78
#PyTips
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4
Пример:
python
def greet(*args):
for name in args:
print(f"Привет, {name}!")
greet('Alice', 'Bob', 'Charlie') # Выведет приветствия
для каждого имени
Здесь функция может принять любое количество аргументов, и их порядок важен. *args удобно использовать, когда заранее неизвестно, сколько аргументов будет передано в функцию.
Пример:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="New York")
Здесь можно передать любое количество аргументов с ключами (именами), и они будут собраны в словарь. Это полезно, когда вы не уверены, какие именно аргументы могут быть переданы.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
PyCode
Добро пожаловать на PyCode! Здесь мы вместе шаг за шагом изучаем основы языка программирования Python. От простых понятий до продвинутых тем, каждый урок будет наполнен понятными объяснениями, практическими примерами и, конечно же, юмором!
👨💻3
👨💻3
Пример:
numbers = [2, 4, 6, 8]
if all([x % 2 == 0 for x in numbers]): # == сравнивает делится ли число без остатка на два
print("Все числа чётные!")
#PyTips
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
В Python инкапсуляция реализуется через сокрытие атрибутов:
Приватные атрибуты (например, __атрибут) скрыты и недоступны вне класса.
Защищённые атрибуты (например, _атрибут) доступны, но не предназначены для прямого использования за пределами класса.
Пример приватного атрибута:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # Приватный атрибут
В этом примере атрибут __balance скрыт и доступен только через методы, защищающие от неправильных изменений. Мы создаём чёткий интерфейс для взаимодействия с данными объекта, и другие объекты могут работать только через определённые методы, не зная, как всё устроено внутри.
Контроль доступа: Инкапсуляция защищает данные, гарантируя, что изменения в них происходят безопасно и через контролируемый интерфейс.
Упрощение интерфейса: Пользователь работает только с важными методами, не вникая в детали реализации.
Повышение надёжности кода: Защищённые данные и методы уменьшают вероятность ошибок, особенно при разработке сложных систем, где взаимодействие между объектами может быть сложным.
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Что выведет данный код?
Anonymous Quiz
11%
[1], [1, 2], [3]
33%
[1], [2], [3]
44%
[1], [1, 2], [1, 2, 3]
11%
[1], [1, 2], [3]
👨💻3