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
Когда возникает ошибка, 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
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
Разберём основные виды: позиционные, именованные, а также специальные аргументы *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
Пример:
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
В Python инкапсуляция реализуется через сокрытие атрибутов:
Приватные атрибуты (например, __атрибут) скрыты и недоступны вне класса.
Защищённые атрибуты (например, _атрибут) доступны, но не предназначены для прямого использования за пределами класса.
Пример приватного атрибута:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # Приватный атрибут
В этом примере атрибут __balance скрыт и доступен только через методы, защищающие от неправильных изменений. Мы создаём чёткий интерфейс для взаимодействия с данными объекта, и другие объекты могут работать только через определённые методы, не зная, как всё устроено внутри.
Контроль доступа: Инкапсуляция защищает данные, гарантируя, что изменения в них происходят безопасно и через контролируемый интерфейс.
Упрощение интерфейса: Пользователь работает только с важными методами, не вникая в детали реализации.
Повышение надёжности кода: Защищённые данные и методы уменьшают вероятность ошибок, особенно при разработке сложных систем, где взаимодействие между объектами может быть сложным.
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Lambda-функция состоит из:
Ключевого слова lambda
Аргументов функции
Выражения, которое будет выполнено и возвращено
Синтаксис:
lambda аргументы: выражение
Пример:
double = lambda x: x * 2
print(double(5)) # Выведет 10
Lambda-функция берёт один аргумент x и возвращает его удвоенное значение.
Пример с sorted():
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # [(1, 'one'), (3, 'three'), (2, 'two')]
Lambda-функции идеально подходят для небольших одноразовых вычислений, когда объявлять полноценную функцию через def излишне.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Синтаксис:
python
list.sort(key=None, reverse=False)
key — необязательный параметр. Указывает функцию для сортировки элементов.
reverse — если True, сортировка выполняется в обратном порядке.
Пример:
python
numbers = [5, 3, 4, 2, -1]
numbers.sort()
print(numbers) # [-1, 2, 3, 4, 5]
Синтаксис:
python
sorted(iterable, key=None, reverse=False)
Пример:
python
numbers = [3, 1, 4, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 2, 3, 4]
print(numbers) # [3, 1, 4, 2] — исходный список не изменился
sort() изменяет исходный список, sorted() создаёт новый.
sort() работает только со списками, sorted() — с любыми итерируемыми объектами.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
😵💫Полиморфизм — это один из ключевых принципов ООП, который позволяет методам и объектам вести себя по-разному в зависимости от контекста. Это означает, что одна и та же операция может выполняться по-разному для объектов различных классов.Виды полиморфизма:
Пример:
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Bark"
class Cat(Animal):
def speak(self):
return "Meow"
В этом примере классы Dog и Cat переопределяют метод speak(), унаследованный от класса Animal. Хотя метод имеет одно и то же название, он возвращает разные результаты в зависимости от типа объекта.
Пример:
class Shape:
def area(self):
pass
class Square(Shape):
def area(self):
return "Calculating area of square"
class Circle(Shape):
def area(self):
return "Calculating area of circle"
Здесь классы Square и Circle реализуют метод area(), но их поведение различается в зависимости от фигуры.
Полиморфизм делает код более гибким и универсальным. Вы можете писать функции, которые работают с разными типами объектов, не зная их точных классов заранее. Это упрощает разработку и поддерживает принцип "написать код один раз, использовать везде".
#PyLearn #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Плюсы многопоточности
Параллелизм позволяет выполнять задачи в фоне, не блокируя основное выполнение программы.
Удобство использования стандартной библиотеки threading.
Пример:
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
Минусы многопоточности:
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4
Преимущества:
Python известен своим лаконичным и простым синтаксисом. Он ближе к естественному языку, что делает его доступным даже для новичков.
Python предоставляет мощную стандартную библиотеку, включающую инструменты для работы с файлами, операционными системами, сетями, протоколами, базами данных, веб-сервисами и многим другим. Это позволяет использовать Python практически в любой сфере разработки — от веб-программирования до машинного обучения.
Программы на Python можно легко запускать на различных операционных системах — Windows, macOS, Linux и др. Благодаря платформонезависимости его можно использовать для создания приложений, которые будут работать на любом устройстве без необходимости изменять код.
Недостатки:
Python — интерпретируемый язык, и это делает его значительно медленнее языков вроде C++ или Java. Python не подходит для задач, требующих высокой производительности, таких как сложные вычисления или обработка больших данных в реальном времени.
Один из главных недостатков Python — это GIL (Global Interpreter Lock). GIL не позволяет одновременно выполнять несколько потоков, что снижает эффективность многопоточности в задачах, связанных с процессором (CPU-bound задачи). В задачах с I/O (сетевые операции, работа с файлами) это не так критично, но при вычислениях на нескольких ядрах CPU GIL становится узким местом.
Python использует динамическую типизацию, что упрощает написание кода, но увеличивает потребление памяти. Это может стать проблемой в системах с ограниченными ресурсами или при работе с большими данными.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x**2, numbers)
print(list(squared)) # оборачиваем в список потому что map возвращает объект
[1, 4, 9, 16, 25]
Здесь map() проходит по списку чисел и возводит каждое в квадрат.
numbers = [1, 2, 3, 4, 5]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # filter тоже возвращает объект
[2, 4]
Здесь filter() вернул только четные числа.
map() полезен, когда нужно применить одну и ту же операцию ко всем элементам списка, как в случае с трансформацией данных.
filter() хорош для ситуаций, когда необходимо отобрать элементы на основе условия
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4
1. Положительные индексы
Пример:
text = "Python"
print(text[0]) # 'P'
print(text[1]) # 'y'
Здесь text[0] вернет первый символ строки — "P", а text[1] вернет "y".
Этот принцип применим не только к строкам, но и к другим итерируемым объектам, таким как списки:
numbers = [10, 20, 30, 40]
print(numbers[0]) # 10
print(numbers[2]) # 30
2. Отрицательные индексы
Пример:
text = "Python"
print(text[-1]) # 'n'
print(text[-2]) # 'o'
В данном примере text[-1] возвращает последний символ строки — "n", а text[-2] — предпоследний символ "o". Этот подход особенно полезен, когда длина коллекции неизвестна, но нужно получить доступ к её последним элементам.
Списки (и другие итерируемые объекты) также поддерживают отрицательные индексы
3. Срезы
start — это начальный индекс (включительно), stop — конечный индекс (не включительно), step — шаг, который определяет, сколько элементов пропускать при итерации.
Пример:
text = "Python"
print(text[1:4]) # 'yth'
Здесь text[1:4] вернет подстроку с 1-го по 3-й индексы, то есть "yth". Важно отметить, что символ с индексом 4 не включается в результат.
4. Шаги
Пример:
text = "Python"
print(text[::2]) # 'Pto'
Здесь используется шаг 2, что приводит к выбору каждого второго символа строки. Результат — "Pto".
Вы также можете использовать отрицательные шаги, чтобы развернуть строку:
print(text[::-1]) # 'nohtyP'
5. Изменение элементов с помощью индексов (в списках)
Пример:
numbers = [1, 2, 3, 4, 5]
numbers[0] = 10
print(numbers) # [10, 2, 3, 4, 5]
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4
Импорты в Python — важный инструмент для организации кода и повторного использования модулей. Импортируя библиотеки или отдельные функции, вы можете значительно упростить свою программу.
1. Как импортировать библиотеку
import math
Теперь доступ к функциям библиотеки осуществляется через точечную нотацию:
print(math.sqrt(16)) # Вывод: 4.0
2. Импортирование отдельной функции
from math import sqrt
print(sqrt(16)) # Вывод: 4.0
Такой способ удобен, когда нужна одна или несколько функций, и не нужно импортировать всю библиотеку.
3. Импортирование с псевдонимом (as)
import math as m
print(m.sqrt(16)) # Вывод: 4.0
Это сокращает код и делает его более читаемым, особенно если часто используется одна и та же библиотека.
4. Импорт всех элементов модуля с помощью *
pythonКопировать кодfrom math import *
print(sqrt(16)) # Вывод: 4.0
print(factorial(5)) # Вывод: 120
Этот метод позволяет обращаться к функциям без префикса библиотеки. Однако его использование не рекомендуется, так как он может привести к конфликтам имен, если несколько импортируемых модулей содержат функции с одинаковыми именами.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
pip — это пакетный менеджер для Python, который используется для установки, управления и обновления пакетов и библиотек. Он позволяет разработчикам легко интегрировать сторонние инструменты и расширять функциональность своих программ.
Установка пакетов:pip install package_name
Обновление пакетов:pip install --upgrade package_name
Удаление пакетов:pip uninstall package_name
Список установленных библиотек:pip list
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Основные возможности requests:
1. Отправка запросов:
Пример запроса на получение данных:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.text)
Запрос вернет текст ответа от сервера.
2. Параметры запроса:
params = {'q': 'python', 'page': 1}
response = requests.get('https://api.example.com/search', params=params)
3. Отправка данных в теле запроса:
data = {'username': 'john', 'password': 'mypassword'}
response = requests.post('https://api.example.com/login', data=data)
4. Работа с JSON:
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
json_data = response.json()
print(json_data['title'])
Интеграция с API: запрос данных с веб-ресурсов, взаимодействие с RESTful API.
Веб-скрапинг: загрузка веб-страниц для последующего анализа данных.
Отправка данных: формы, логины и загрузка файлов на серверы.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4
Цикл while — это один из ключевых инструментов управления потоком программы в Python. Цикл while продолжает выполняться, пока заданное условие остаётся истинным. Это делает его полезным в ситуациях, когда заранее неизвестно, сколько раз потребуется выполнить блок кода.
Синтаксис while
while условие:
тело цикла (какой-то блок кода)
Условие проверяется перед каждой итерацией (
итерация - это одно полное выполнение тела цикла), и если оно истинно (возвращает True), выполняется код тела цикла. Если условие становится ложным (возвращает False), выполнение цикла завершается.x = 0
while x < 5:
print(x)
x += 1
Бесконечные циклы и контроль выполнения
while True:
print("Этот цикл бесконечен")
Применение цикла while
while True:
user_input = input("Введите число: ")
if user_input.isdigit():
break
print("Неверный ввод")
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻2 1
Цикл for — это основной инструмент для перебора элементов в последовательностях (списках, кортежах, строках и др.) и выполнения блока кода для каждого элемента. В Python цикл for отличается от традиционных циклов других языков программирования, где используется счётчик и условие. В Python он более гибкий и часто используется для итерации по коллекциям.
for элемент in последовательность:
тело цикла
В этом цикле переменная элемент
(у программистов принято называть ее i) последовательно принимает значения из указанной последовательности. Как только все элементы пройдены, цикл завершается.my_list = [1, 2, 3, 4, 5]
for number in my_list:
print(number)
Этот цикл перебирает каждый элемент списка и выводит его.
Важно понимать, что каждый элемент будет выведен на новую строку потому что print имеет значение '\n' (перенос на новую строку) по умолчаниюИтерация по строкам и другим коллекциям
Пример итерации по строке:
for char in "Python":
print(char)
Этот цикл выведет каждый символ (на новой строке) слова "Python".
Использование функции range()
Пример:
for i in range(5):
print(i)
Этот цикл выведет числа от 0 до 4. Важно помнить, что range() включает начальное значение (по умолчанию 0), но исключает конечное.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3 1
Оператор break в Python используется для досрочного завершения цикла, когда больше не имеет смысла продолжать его выполнение. При срабатывании break цикл сразу прерывается, и управление передаётся коду, который следует после цикла.
При выполнении break Python немедленно завершает текущий цикл, вне зависимости от оставшихся итераций. Это позволяет прерывать выполнение цикла по определённым условиям, например, когда найден нужный элемент.
for i in range(10):
if i == 5:
break # Прерываем цикл, когда i равно 5
print(i)
Этот цикл завершится, когда переменная i станет равна 5, и больше не выполнит оставшиеся итерации (6–9).
1) Поиск элемента: если цикл ищет элемент в списке, и после его нахождения можно прекратить работу.
2) Прерывание бесконечных циклов: в циклах while True оператор break часто используется для выхода из бесконечного цикла по какому-то условию.
while True:
user_input = input("Введите 'exit' для выхода: ")
if user_input == 'exit':
break
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻3
Continue используется для пропуска текущей итерации цикла и перехода к следующей. В отличие от break, который полностью завершает цикл, continue лишь завершает текущую итерацию, позволяя циклу продолжать работу.
Как работает continue?
Пример: пропуск чётных чисел в цикле.
for i in range(10):
if i % 2 == 0:
continue # Пропускаем чётные числа
print(i)
Этот код выводит только нечётные числа: 1, 3, 5, 7, 9.
1) Фильтрация данных. continue позволяет пропускать нежелательные элементы, например, при работе с файлами, строками или списками.
2) Упрощение кода. continue позволяет упростить логические условия, избегая дополнительных проверок или вложенности.
3) Оптимизация. В сложных вычислениях можно использовать continue для пропуска лишних шагов и ускорения выполнения.
#PyLearn
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻1