Python собеседования pinned «Подписывайся на наши новые каналы! 👩💻 Git 🖥 SQL 👩💻 QA»
В языке Python блок
else
в конструкции try-except-else
выполняется только если в блоке try
не возникло исключений. Это помогает отделить код, который должен выполняться при успешном выполнении try
, от кода обработки ошибок.
try:
# Попытка разделить два числа
result = numerator / denominator
except ZeroDivisionError:
# Обработка ошибки деления на ноль
print("Ошибка: Деление на ноль.")
else:
# Выполняется, если исключения не было
print("Результат:", result)
В этом примере, если переменная
denominator
не равна нулю, деление пройдет успешно, и блок else
выведет результат. Если же произойдет исключение ZeroDivisionError
, блок else
будет пропущен.Еще пример использования:
try:
# Чтение из файла
with open('data.txt', 'r') as file:
data = file.read()
except FileNotFoundError:
# Обработка ошибки отсутствия файла
print("Файл не найден.")
else:
# Выполняется, если файл успешно открыт
process_data(data) # Обработка данных из файла
Блок
else
подходит для кода, который должен выполняться только при отсутствии ошибок в блоке try
, делая программу более читабельной и структурированной.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3
В Python методы добавляются в класс путем определения функций внутри него. Методы экземпляра принимают первым аргументом
self
, ссылающимся на объект.
class MyClass:
def my_method(self):
# Метод экземпляра
print("Hello from instance method")
Создание объекта и вызов метода:
obj = MyClass() # Создаем объект класса
obj.my_method() # Вызываем метод экземпляра
Добавление метода с параметрами:
class MyClass:
def greet(self, name):
# Метод с параметром
print(f"Hello, {name}!")
Статические и класс-методы создаются с помощью декораторов
@staticmethod
и @classmethod
:
class MyClass:
@staticmethod
def static_method():
# Статический метод без self
print("Это статический метод")
@classmethod
def class_method(cls):
# Класс-метод принимает cls вместо self
print(f"Это метод класса {cls}")
Вызов статического и класс-методов:
MyClass.static_method() # Вызов статического метода
MyClass.class_method() # Вызов класс-метода
Методы определяют поведение объектов и класса, позволяя взаимодействовать с данными и выполнять операции.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👀1
В Python для импорта конкретных функций или классов из модуля используется конструкция
from ... import ...
.Например, импортируем функцию
sqrt
из модуля math
:
from math import sqrt # Импортируем функцию sqrt из модуля math
result = sqrt(25) # Используем функцию sqrt для вычисления квадратного корня из 25
print(result) # Выведет: 5.0
Импорт нескольких функций одновременно:
from math import sin, cos, pi # Импортируем функции sin, cos и константу pi
print(sin(pi/2)) # Выведет: 1.0
print(cos(0)) # Выведет: 1.0
Импорт класса из модуля:
from collections import Counter # Импортируем класс Counter из модуля collections
data = ['a', 'b', 'a', 'c', 'b', 'a']
counter = Counter(data) # Создаем объект Counter для подсчета элементов в data
print(counter) # Выведет: Counter({'a': 3, 'b': 2, 'c': 1})
Переименование импортируемых элементов с помощью
as
:
from datetime import datetime as dt # Импортируем класс datetime как dt
now = dt.now() # Создаем объект текущего времени
print(now)
Этот способ импорта позволяет загружать только необходимые компоненты, что делает код более оптимизированным и понятным.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩2
В Python модуль
re
используется для работы с регулярными выражениями: поиска, сопоставления и замены в строках.Импорт модуля:
import re # Импортируем модуль re
Поиск совпадения с
re.search()
:
text = "Contact us at support@example.com"
match = re.search(r'\w+@\w+\.\w+', text) # Ищем email в тексте
if match:
print(match.group()) # Выведет: support@example.com
Получение всех совпадений с
re.findall()
:
numbers = re.findall(r'\d+', "Prices: 100, 200, 300") # Ищем все числа
print(numbers) # Выведет: ['100', '200', '300']
Замена подстрок с
re.sub()
:
text = "Red car, blue car, green car"
new_text = re.sub(r'car', 'bike', text) # Заменяем 'car' на 'bike'
print(new_text) # Выведет: "Red bike, blue bike, green bike"
Разделение строки с
re.split()
:
items = re.split(r',\s*', "apple, banana, cherry") # Разделяем по запятой
print(items) # Выведет: ['apple', 'banana', 'cherry']
Модуль
re
обеспечивает гибкость при работе с текстом, позволяя применять сложные шаблоны для анализа и обработки данных.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1⚡1
В Python декораторы с аргументами — это функции, которые принимают аргументы и возвращают сам декоратор. Это позволяет передавать дополнительные параметры для настройки поведения декоратора.
Пример декоратора с аргументами для повторения выполнения функции:
def repeat(times):
# Декоратор, принимающий аргумент times
def decorator(func):
# Декоратор без аргументов
def wrapper(*args, **kwargs):
# Обертка функции
result = None
for _ in range(times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
Использование декоратора с аргументами:
@repeat(3)
def greet(name):
# Функция, которую декорируем
print(f"Hello, {name}!")
greet("Alice")
В этом примере декоратор
@repeat(3)
вызывает функцию greet
три раза подряд. Аргумент times
позволяет задавать количество повторений при применении декоратора.Декораторы с аргументами полезны для создания гибких и переиспользуемых решений, где поведение декоратора можно контролировать через параметры.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9✍1🔥1
В Python библиотека
sqlite3
используется для работы с базой данных SQLite. С ее помощью можно создавать, изменять и читать базы данных, хранящиеся в файловой системе.Создание подключения и курсора:
import sqlite3 # Импортируем модуль sqlite3
# Подключаемся к базе данных (файл example.db)
conn = sqlite3.connect('example.db')
cursor = conn.cursor() # Создаем курсор для выполнения операций
Создание таблицы:
# Создаем таблицу users с полями id и name
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)
''')
conn.commit() # Сохраняем изменения
Вставка данных:
# Вставляем новую запись в таблицу
cursor.execute('INSERT INTO users (name) VALUES (?)', ('Alice',))
conn.commit()
Получение данных:
# Извлекаем все записи из таблицы
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall() # Получаем результат запроса
for row in rows:
print(row) # Выводим каждую запись
Обновление данных:
# Обновляем имя пользователя с id = 1
cursor.execute('UPDATE users SET name = ? WHERE id = ?', ('Bob', 1))
conn.commit()
Удаление данных:
# Удаляем пользователя с id = 1
cursor.execute('DELETE FROM users WHERE id = ?', (1,))
conn.commit()
Закрытие подключения:
# Закрываем курсор и соединение
cursor.close()
conn.close()
Библиотека
sqlite3
позволяет выполнять стандартные SQL-запросы, обеспечивая простой и эффективный способ взаимодействия с базами данных SQLite.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
В Python тип данных
float
представляет числа с плавающей точкой, то есть дробные числа.Создание переменной типа
float
:
number = 3.14 # Создаем переменную number со значением 3.14
Арифметические операции с числами
float
:
addition = 1.5 + 2.5 # Сложение: addition будет 4.0
subtraction = 5.0 - 0.5 # Вычитание: subtraction будет 4.5
multiplication = 2.0 * 3.0 # Умножение: multiplication будет 6.0
division = 7.0 / 2.0 # Деление: division будет 3.5
Преобразование других типов данных в
float
с помощью функции float()
:
int_number = 10
float_number = float(int_number) # Преобразуем 10 в 10.0
string_number = "2.718"
float_from_string = float(string_number) # Преобразуем строку "2.718" в число 2.718
Форматирование вывода чисел
float
:
value = 1 / 3
print(f"{value:.2f}") # Выведет: 0.33 (до двух знаков после запятой)
Особенности работы с
float
из-за ограниченной точности:
sum = 0.1 + 0.2
print(sum) # Выведет: 0.30000000000000004
# Для точных вычислений используйте модуль decimal
from decimal import Decimal
sum_decimal = Decimal('0.1') + Decimal('0.2')
print(sum_decimal) # Выведет: 0.3
Проверка типа переменной:
print(type(number)) # Выведет: <class 'float'>
Числа
float
полезны для работы с дробными значениями, но следует быть внимательным к возможным погрешностям при вычислениях.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3⚡2🤩1
В Python цикл
for
используется для итерации по итерируемым объектам, таким как списки, строки, кортежи, множества и словари.Пример перебора списка:
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit) # Выводим каждый фрукт из списка
Итерация по строке:
for char in 'Python':
print(char) # Выводим каждый символ строки
Использование функции
range()
для генерации последовательности чисел:
for i in range(5):
print(i) # Выводим числа от 0 до 4
С указанием начального значения и шага:
for i in range(1, 10, 2):
print(i) # Выводим числа 1, 3, 5, 7, 9
Перебор элементов словаря:
person = {'name': 'Alice', 'age': 30}
for key, value in person.items():
print(f"{key}: {value}") # Выводим ключ и значение
Вложенные циклы
for
:
for i in range(3):
for j in range(2):
print(f"i = {i}, j = {j}") # Комбинации i и j
Цикл
for
может содержать инструкции break
и continue
для управления потоком выполнения:
for i in range(10):
if i == 5:
break # Прерываем цикл при i равном 5
print(i)
for i in range(10):
if i % 2 == 0:
continue # Пропускаем четные числа
print(i)
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
В Python можно создавать собственные исключения, наследуя от встроенных классов исключений, обычно от
Exception
:
class MyCustomError(Exception):
# Пользовательское исключение, наследующее от Exception
pass
Это создает простое исключение
MyCustomError
, которое можно вызвать с помощью raise
:
def divide(a, b):
if b == 0:
raise MyCustomError("Деление на ноль недопустимо.")
return a / b
try:
result = divide(10, 0)
except MyCustomError as e:
print(e) # Выведет сообщение об ошибке
Можно добавить собственный конструктор для передачи дополнительных данных:
class ValidationError(Exception):
def __init__(self, message, field):
# Инициализируем базовый класс Exception
super().__init__(message)
self.field = field # Дополнительный атрибут
try:
raise ValidationError("Неверное значение.", "username")
except ValidationError as e:
print(f"{e.field}: {e}") # Выведет: username: Неверное значение.
Создание собственных исключений помогает делать код более понятным и предоставляет дополнительные возможности для обработки ошибок.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
В Python для чтения файла построчно используются различные методы.
Использование цикла for по объекту файла:
with open('filename.txt', 'r') as file:
for line in file:
print(line.strip()) # Выводим строку без лишних пробелов и переносов
В этом примере файл открывается с помощью
with open
, что обеспечивает автоматическое закрытие файла после завершения блока. Цикл for
перебирает каждую строку в файле.Чтение строк с помощью readline():
with open('filename.txt', 'r') as file:
line = file.readline() # Читаем первую строку
while line:
print(line.strip()) # Обрабатываем строку
line = file.readline() # Читаем следующую строку
Метод
readline()
читает файл по одной строке за вызов. Цикл while
продолжается до тех пор, пока не будет прочитан весь файл.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
В Python атрибуты класса являются общими для всех экземпляров, а атрибуты экземпляра уникальны для каждого объекта.
Атрибуты класса:
class MyClass:
class_attr = 0 # Атрибут класса
print(MyClass.class_attr) # Выведет: 0
obj1 = MyClass()
obj2 = MyClass()
print(obj1.class_attr) # Выведет: 0
MyClass.class_attr = 10 # Изменяем атрибут класса
print(obj1.class_attr) # Выведет: 10
print(obj2.class_attr) # Выведет: 10
Атрибуты экземпляра:
class MyClass:
def __init__(self, value):
self.instance_attr = value # Атрибут экземпляра
obj1 = MyClass(1)
obj2 = MyClass(2)
print(obj1.instance_attr) # Выведет: 1
print(obj2.instance_attr) # Выведет: 2
obj1.instance_attr = 3 # Изменяем атрибут экземпляра
print(obj1.instance_attr) # Выведет: 3
print(obj2.instance_attr) # Выведет: 2
Атрибуты класса подходят для данных, общих для всех объектов, а атрибуты экземпляра — для индивидуальных данных каждого объекта.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
В Python генераторы — это простой и эффективный способ создавать итераторы с помощью функций и ключевого слова
yield
.Пример генератора:
def my_generator(n):
# Генерируем числа от 0 до n-1
for i in range(n):
yield i
Использование генератора:
gen = my_generator(5)
for value in gen:
print(value) # Выведет числа от 0 до 4
При каждом вызове
yield
функция приостанавливается и сохраняет свое состояние. При следующей итерации выполнение продолжается с того же места.Генераторы позволяют работать с большими объемами данных, так как значения вычисляются по мере необходимости, не загружая всю последовательность в память.
Также существуют генераторные выражения, аналогичные списковым включениям:
gen_exp = (x * x for x in range(5))
for value in gen_exp:
print(value) # Выведет квадраты чисел от 0 до 4
Генераторы упрощают создание итераторов для последовательного доступа к данным и повышают производительность программы за счет экономии ресурсов.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
В Python библиотека
asyncio
используется для написания асинхронного кода, позволяющего выполнять операции ввода-вывода без блокировки.Создание корутины:
import asyncio # Импортируем модуль asyncio
async def main():
# Асинхронная функция
print('Hello')
await asyncio.sleep(1) # Асинхронная задержка на 1 секунду
print('World')
asyncio.run(main()) # Запускаем корутину
Выполнение нескольких задач одновременно:
async def say_after(delay, what):
await asyncio.sleep(delay) # Задержка
print(what)
async def main():
task1 = asyncio.create_task(say_after(1, 'Hello'))
task2 = asyncio.create_task(say_after(2, 'World'))
await task1 # Ждем завершения task1
await task2 # Ждем завершения task2
asyncio.run(main())
Использование asyncio.gather:
async def main():
await asyncio.gather(
say_after(1, 'Hello'),
say_after(2, 'World'),
)
asyncio.run(main())
asyncio
облегчает написание высокопроизводительных сетевых и веб-приложений, позволяя эффективно управлять большим количеством соединений и задач.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Строковые литералы в Python используются для представления текста. Они могут быть заключены в одинарные ' ', двойные " " или тройные кавычки ''' '''/""" """. Тройные кавычки позволяют создавать многострочные строки.
Основные виды строковых литералов:
- Одинарные и двойные кавычки: позволяют использовать разные типы кавычек внутри строки без экранирования.
single_quote = 'Hello, World!'
double_quote = "Hello, World!"
- Тройные кавычки: удобны для многострочного текста и документации.
multi_line = """Hello,
World!"""
- Сырые строки: обозначаются префиксом
r
и игнорируют экранирование символов.
raw_string = r"C:\Users\Name"
Строковые литералы поддерживают различные методы для обработки текста, такие как
upper()
, lower()
, format()
и другие, что делает их гибким инструментом для работы с текстовыми данными.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3
Цепочка исключений в Python позволяет сохранять контекст произошедших ошибок, что облегчает отладку и анализ проблем.
Основной способ создания цепочки исключений — использование ключевого слова
from
. Это связывает новое исключение с исходным, показывая их взаимосвязь.Пример использования:
def read_file(file_path):
try:
with open(file_path, 'r') as file:
return file.read()
except FileNotFoundError as e:
raise FileNotFoundError(f"Файл по пути {file_path} не найден") from e
try:
content = read_file("non_existent_file.txt")
except FileNotFoundError as err:
print(err)
print("Исходная ошибка:", err.__cause__)
Вывод:
Файл по пути non_existent_file.txt не найден
Исходная ошибка: [Errno 2] No such file or directory: 'non_existent_file.txt'
В этом примере при отсутствии файла генерируется новое исключение с дополнительным сообщением, при этом сохраняется исходная ошибка. Это помогает лучше понять причину сбоя и упростить диагностику.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Условные операторы
elif
и else
в Python расширяют возможности управления потоком выполнения программы, позволяя обрабатывать несколько условий.Основная структура условий выглядит так:
if condition1:
# блок кода при условии1
elif condition2:
# блок кода при условии2
else:
# блок кода, если ни одно из условий не выполнено
Пример использования:
temperature = 25
if temperature > 30:
weather = "Hot"
elif temperature > 20:
weather = "Warm"
else:
weather = "Cool"
print(weather) # Output: Warm
В этом примере проверяется значение температуры. Если она больше 30, устанавливается статус "Hot". Если больше 20, но меньше или равна 30, статус будет "Warm". Во всех остальных случаях используется "Cool". Оператор
elif
позволяет добавить дополнительные условия между if
и else
, обеспечивая гибкость в логике программы.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Наследование в Python позволяет создавать новый класс на основе существующего, наследуя его атрибуты и методы. Это способствует повторному использованию кода и упрощает создание иерархий классов.
Основная синтаксис наследования:
class Parent:
def greet(self):
print("Hello from Parent")
class Child(Parent):
def greet(self):
print("Hello from Child")
super().greet()
Пример использования:
child_instance = Child()
child_instance.greet()
Вывод:
Hello from Child
Hello from Parent
В этом примере класс
Child
наследует от Parent
, переопределяя метод greet
. С помощью super()
вызывается метод родительского класса, что позволяет расширять функциональность. Наследование облегчает управление кодом, позволяя создавать специализированные классы на основе общих.Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Псевдонимы при импорте позволяют присваивать модулям или их частям более короткие и удобные имена, что улучшает читаемость кода и упрощает работу с длинными именами.
Использование псевдонимов осуществляется с помощью ключевого слова
as
.Примеры:
1. Импорт модуля с псевдонимом:
import numpy as np
array = np.array([1, 2, 3])
2. Импорт функции с псевдонимом:
from datetime import datetime as dt
current_time = dt.now()
Псевдонимы полезны для сокращения длинных имен модулей, избежания конфликтов имен и повышения удобства использования библиотек в проекте.
Ставь 👍, если было полезно!
Еще больше ответов для подготовки к собеседованиям на сайте 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12