Python Junior Flashcards
Python - интерпретируемый язык или компилируемый?
Python является интерпретируемым языком с компиляцией в промежуточный байт-код, который затем интерпретируется и выполняется.
Этот подход сочетает в себе преимущества интерпретации (гибкость, динамическая типизация) с некоторыми преимуществами компиляции (более быстрое выполнение благодаря использованию байт-кода).
Какие есть меняющиеся и постоянные типы данных? (mutable & immutable)
Изменяемые
- list
- set
- dict
Неизменяемые
- int
- float
- str
- tuple
- frozenset
Мутабельные (изменяемые) и иммутабельные (неизменяемые) типы данных определяются по их способности изменяться после создания.
Что такое область видимости переменных?
Суть: Глобальная - доступна везде. Локальная - внутри функции.
В чем разница между процессами и потоками?
Суть: процессы - это отдельные выполнения программы, каждое со своим набором инструкций и данными, а потоки - это параллельные выполнения внутри процесса, разделяющие общие ресурсы.
Какие есть виды импорта?
Абсолютный и относительный импорт
* Абсолютный - полный путь (от начала корневой папки проекта) к желаемому модулю.
* Относительный - относительный путь (начиная с пути текущего модуля) к желаемому модулю.
Абсолютные импорты:
~~~
import other
import packA.a2
import packA.subA.sa1
~~~
Явные относительные импорты:
~~~
import other
from . import a2
from .subA import sa1
~~~
Как правило, абсолютные импорты предпочтительнее относительных. Они позволяют избежать путаницы между явными и неявными импортами. Кроме того, любой скрипт с явными относительными импортами нельзя запустить напрямую:
Что такое итератор?
Итераторы — используются для перебора группы элементов (например, в списке).
Что такое генератор?
Генераторы — представляют собой способ реализации итераторов. В них применяется yield для возврата выражения из функции, но в остальном генератор ведет себя как обычная функция.
В чем разница между итераторами и генераторами?
Суть: Итераторы для перебора группы элементов (например, в списке).
Генераторы это способ реализации итераторов. Возврат выражения из функции происходит через yield.
Что такое метакласс?
В python все состоит из объектов. И для создания классов используются другие классы - метаклассы. По умолчанию для всех классов метаклассом является type
В чем разница между classmethod и staticmethod?
classmethod
и staticmethod
- это декораторы, позволяющие определять методы в классах с особым поведением.
Основное отличие между classmethod
и staticmethod
заключается в том, что classmethod
принимает ссылку на класс, а staticmethod
- нет.
classmethod
Суть: обычный метод, у которого есть доступ ко всем атрибутам класса. Получает класс в качестве первого аргумента.
@classmethod – это метод, который получает класс в качестве неявного первого аргумента, точно так же, как обычный метод экземпляра получает экземпляр. Это означает, что вы можете использовать класс и его свойства внутри этого метода, а не конкретного экземпляра.
Проще говоря, @classmethod – это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван. Следовательно, classmethod – это метод, который привязан к классу, а не к экземпляру класса.
staticmethod
Суть: аналогично обычной функции вне класса, можно использовать без создания экземпляра класса. Не получает класс в качестве первого аргумента.
@staticmethod – используется для создания метода, который ничего не знает о классе или экземпляре, через который он был вызван. Он просто получает переданные аргументы, без неявного первого аргумента, и его определение неизменяемо через наследование.
Проще говоря, @staticmethod – это вроде обычной функции, определенной внутри класса, которая не имеет доступа к экземпляру, поэтому ее можно вызывать без создания экземпляра класса.
Как работают декораторы, контекстные менеджеры?
Суть:
- Декоратор это функция расширяющая возможности функции. Принимает в качестве аргумента функцию. Синтаксичский сахар для функций высшего порядка
- Контекстный менеджер функция with автоматически управляет входом и выходом из определенного контекста.
Как работают dict comprehension, list comprehension и set comprehension?
Синтаксис list comprehension выглядит следующим образом:
[выражение for элемент in последовательность if условие]
или в расширенной форме:
[выражение for элемент in последовательность]
где:
-
выражение
- это выражение, которое будет применено к каждому элементу последовательности. -
элемент
- это переменная, представляющая текущий элемент последовательности. -
последовательность
- это исходная последовательность, по которой будет проходить итерация. -
условие
(необязательно) - это условие, которое фильтрует элементы последовательности.
Примеры использования list comprehension:
- Создание списка квадратов чисел от 0 до 9:
squares = [x**2 for x in range(10)]
- Фильтрация списка, оставляя только четные числа:
even_numbers = [x for x in range(10) if x % 2 == 0]
- Преобразование списка строк в список их длин:
strings = ["apple", "banana", "orange"]
lengths = [len(s) for s in strings]
Можно ли использовать несколько декораторов для одной функции?
Да, в Python можно применять несколько декораторов к одной функции.
Декораторы применяются сверху вниз, то есть последний декоратор, указанный над функцией, будет выполнен первым.
Что такое lambda-функции?
Это анонимные функции, которые могут быть созданы и использованы в одной строке кода.
Лямбды часто передают в функции map, reduce, filter.
Можно ли создать декоратор из класса?
Да, в Python можно создавать декораторы из класса. Для этого класс должен определить методы \_\_init\_\_
(конструктор) и \_\_call\_\_
, который будет вызван при применении декоратора к функции.
Что такое exceptions, <try-except>
?
Обработка исключений. Пробуем выполнить какой-то код, если он выполняется успешно, то после finally продолжаем идти по программе. Если получили исключение, то обрабатываем его в except.
Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)?
PEP - Python Enhancement Proposals - база всех предложений как улучшить Python и что изменить.
PEP8 - руководство по написанию кода на Python.
Какие есть типы данных?
- Mutable
- Immutable
- Числа (int, float)
- Строки (str)
- Списки (list, tuple, set, frozenset)
- Словари (dict)
- Файлы
- Boolean
Какая разница между list и tuple, зачем они?
Как использовать встроенные коллекции (list, set, dictionary)?
List (список):
- Создание списка: mylist = [1, 2, 3, 4, 5]
- Добавление элемента в конец списка: mylist.append(6)
- Получение элемента по индексу: mylist[2]
- Изменение элемента по индексу: mylist[0] = 10
- Удаление элемента по значению: mylist.remove(3)
Set (множество):
- Создание множества: myset = {1, 2, 3, 4, 5}
- Добавление элемента в множество: myset.add(6)
- Проверка наличия элемента в множестве: print(3 in myset)
- Удаление элемента из множества: myset.remove(4)
Dictionary (словарь):
- Создание словаря: mydict = {‘a’: 1, ‘b’: 2, ‘c’: 3}
- Получение значения по ключу: print(mydict[‘b’])
- Добавление новой пары ключ-значение: mydict[‘d’] = 4
- Изменение значения по ключу: mydict[‘a’] = 10
- Удаление элемента по ключу: del mydict[‘c’]
Как создается объект в Python, для чего new, зачем init?
Это методы __init__ и __new__ , которые автоматически вызывается при создании объектов.
__new__ – Это первый метод, который будет вызван при инициализации объекта. Он принимает в качестве параметров класс и потом любые другие аргументы, которые будут переданы в __init__ . __new__ используется весьма редко, но иногда бывает полезен, в частности, когда класс наследуется от неизменяемого (immutable) типа, такого как кортеж (tuple) или строка
__init__ – Инициализатор класса. Ему передаётся всё, с чем был вызван первоначальный конструктор
В чем заключается сложность доступа к элементам dict?
Dict - это набор пар ключ+значение. Доступ к значению происходит через указание ключа.
Доступ к ключам происходит через метод .key() и их перебор через for loop.
thisdict = { "brand": "Ford", "model": "Mustang", "year": 1964 }
thisdict["brand"]
Проверка пересечения множеств (sets)
set1.intersection(set2)
Вычитание множеств (sets)
s3 = s1 - s2 - вычесть одно множество из другого
Конвертация списка в множество и обратно для удаления дубликатов
list(set([1, 2, 3, 4, 5, 6, 6, 5, 4]))
Словари - dict
Python
d = {”key”: “value”, "key2": "value2"}
user1[”name”] - обращение по ключу к значению
Функции
-
users.items()
- Возвращает пары (ключ, значение) для каждого элемента словаря. users.values()
users.keys()