import sqlite3
# Подключение к базе данных
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# Пользовательский ввод
user_id = '1 OR 1=1'
# Безопасный запрос с использованием параметров
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))
# Получение результата
result = cursor.fetchall()
В этом примере данные из переменной
user_id
передаются в запрос через параметр ?
. Даже если в user_id
будет вредоносный код, он не выполнится, так как интерпретируется как строка, а не часть SQL-запроса.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "Woof!"
# Animal нельзя создать, Dog — можно
dog = Dog()
print(dog.make_sound()) # Вывод: Woof!
Абстрактный класс создается с использованием модуля
abc
. Класс наследуется от ABC
, а методы помечаются декоратором @abstractmethod
. Дочерние классы обязаны реализовать абстрактные методы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
__hash__()
используется для получения хэш-значения объекта. Хэш — это целое число, которое уникально идентифицирует объект во время его жизни (если объект неизменяемый). Хэширование позволяет объектам быть ключами в словарях или элементами множеств.Если объект изменяемый, он не должен быть хэшируемым, так как изменение его состояния приведет к изменению хэша, что нарушит работу структур данных, основанных на хэшах.
Пример реализации для пользовательского класса:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __hash__(self):
return hash((self.x, self.y))
Здесь хэш объекта
Point
вычисляется на основе кортежа из координат x
и y
. Это гарантирует, что объекты с одинаковыми координатами будут иметь одинаковый хэш. Если объект изменяемый, переопределять __hash__
не рекомендуется.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💯1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Пример:
def example():
x = 10 # x — локальная переменная
print(x)
example()
print(x) # Ошибка: x не определена в глобальной области
Локальные переменные имеют приоритет над глобальными, если имена совпадают. Для изменения глобальной переменной внутри функции используется ключевое слово
global
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
Обычные методы (instance methods) принимают первым аргументом
self
— ссылку на экземпляр класса. Вызываются через экземпляр:
class MyClass:
def instance_method(self):
return "This is an instance method"
obj = MyClass()
obj.instance_method() # Вызов метода
Методы класса (class methods) принимают
cls
— ссылку на класс. Декорируются @classmethod
. Вызываются через класс или экземпляр:
class MyClass:
@classmethod
def class_method(cls):
return "This is a class method"
MyClass.class_method() # Вызов через класс
Статические методы (static methods) не принимают
self
или cls
. Декорируются @staticmethod
. Вызываются через класс или экземпляр:
class MyClass:
@staticmethod
def static_method():
return "This is a static method"
MyClass.static_method() # Вызов через класс
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
def decorator1(func):
def wrapper():
print("Decorator 1")
func()
return wrapper
def decorator2(func):
def wrapper():
print("Decorator 2")
func()
return wrapper
@decorator1
@decorator2
def my_function():
print("Original function")
my_function()
В этом примере сначала применяется
decorator2
, затем decorator1
. При вызове my_function
вывод будет:
Decorator 1
Decorator 2
Original function
Декораторы оборачивают функцию слоями, изменяя её поведение.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
insert
.
my_list = [1, 2, 3, 4]
my_list.insert(2, 'new')
print(my_list) # [1, 2, 'new', 3, 4]
Первый аргумент — индекс, на который нужно вставить элемент. Второй аргумент — сам элемент. Если индекс выходит за пределы списка, элемент добавляется в конец.
my_list.insert(10, 'end')
print(my_list) # [1, 2, 'new', 3, 4, 'end']
Метод изменяет исходный список и не возвращает новое значение.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💯2
CREATE TABLE
.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);
В этом примере создается таблица
users
с тремя столбцами: id
, username
и email
. id
является первичным ключом с автоматическим инкрементом, username
— обязательное поле, а email
должно быть уникальным.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Вторая таблица
orders
создается с внешним ключом, который ссылается на столбец id
таблицы users
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4
in
используется для проверки наличия элемента в последовательности (например, списке, строке, кортеже) или ключа в словаре. Возвращает True
, если элемент найден, и False
, если нет.
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # True, так как 3 есть в списке
print(6 in numbers) # False, так как 6 отсутствует
Также
in
применяется для проверки подстроки в строке:
text = "Hello, world!"
print("world" in text) # True, подстрока найдена
Для словарей
in
проверяет наличие ключа:
data = {"name": "Alice", "age": 25}
print("name" in data) # True, ключ существует
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
next()
используется для получения следующего значения из генератора. При каждом вызове next()
генератор выполняет код до ключевого слова yield
и возвращает соответствующее значение. Если элементы закончились, вызывается исключение StopIteration
.
def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # 1, первое значение
print(next(gen)) # 2, второе значение
print(next(gen)) # 3, третье значение
Можно указать значение по умолчанию вторым аргументом, чтобы избежать исключения
StopIteration
:
print(next(gen, "No more items")) # No more items, элементы закончились
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit)
Результат:
0 apple
1 banana
2 cherry
Функция полезна, когда требуется отслеживать позицию элемента в последовательности, например, при обработке списков или других коллекций. Также можно указать начальное значение индекса с помощью параметра
start
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
int()
преобразует переданное значение в целое число. Она может принимать строку, число с плавающей точкой или другой объект, поддерживающий преобразование в целое число. Если передаётся строка, можно указать систему счисления (по умолчанию — десятичная).
number = int("42") # Преобразует строку "42" в целое число 42
float_to_int = int(3.14) # Преобразует 3.14 в 3 (отбрасывает дробную часть)
binary = int("1010", 2) # Преобразует двоичную строку "1010" в число 10
Если преобразование невозможно (например, при передаче нечисловой строки), возникает исключение
ValueError
. Функция полезна для обработки пользовательского ввода или преобразования данных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
help()
используется для получения справочной информации о модулях, классах, функциях и других объектах в Python. Она выводит документацию, доступную через docstring.
help(len) # Получить информацию о функции len
help(str) # Получить документацию по классу str
Если вызвать
help()
без аргументов, откроется интерактивный режим, где можно вводить названия объектов для получения справки. Это полезно для изучения встроенных модулей и функций, а также для проверки документации собственного кода.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3