Python Flashcards
Основные фичи питона?
- это интерпретируемый язык
- в нем динамическая типизация данных
- это объектно-ориентированный язык
- он лаконичный и внешне простой
- распространяется бесплатно
- у него большое сообщество
В чем разница между списками list и кортежами tuple?
Основная разница в том, что список может изменяться (mutable), а кортеж не может (immutable).
Как в питоне работает тернарный оператор?
Это обычные if который мы записываем в одну строку, для лаконичности и хорошей читабельности.
Выражение выглядит так:
[если верно] if [выражение] else [если неверно]
»> a, b = 2, 3
»> min = a if a < b else b
»> min
2
»> print(“Hi”) if a < b else print(“Bye”)
Hi
Что такое отрицательный индекс negative index?
> > > mylist = [0, 1, 2, 3, 4, 5 ,6, 7, 8]
В отличие от положительного индекса отрицательный начинает поиск с конца:
mylist[-3]
6
Еще это помогает при создании срезов с конца:
mylist[-6:-1]
[3, 4, 5, 6, 7]
Питон чувствителен к регистру?
Да
»> myname=”Ayushi”
»> Myname
Traceback (most recent call last):
File “<pyshell#3>”, line 1, in
Myname
NameError: name “Myname” is not defined
Предельно допустимая длина идентификатора в питоне?
В питоне идентификатор может быть любой длины. Помимо этого есть несколько правил для присвоения имен:
- первым символом может быть нижнее подчеркивание (), символы A-Z или a-z;
- остальная часть имени может состоять из символов A-Z/a-z//0-9;
- не забываем, что питон чувствителен к регистру;
- в качестве имени нельзя использовать ключевые слова (keywords):
and, def, False, import, not, True, as, del, finally, in, or, try, assert, elif, for, is, pass, while, break, else, from, lambda, print, with, class, except, global, None, raise, yield, continue, exec, if, nonlocal, return.
Как можно преобразовать строку в нижний регистр?
Для этого используется метод lower():
»> “AyuShi”.lower()
“ayushi”
Для преобразования в верхний регистр (uppercase) используется метод upper():
»> “AyuShi”.upper()
“AYUSHI”
Еще есть методы isupper() (все символы в верхнем регистре) и islower() (все символы в нижнем регистре), которые проверяют регистр всех символов имени.
»> “AyuShi”.isupper()
False
»> “AYUSHI”.isupper()
True
»> “ayushi”.islower()
True
»> “@yu$hi”.islower()
True
»> “@YU$HI”.isupper()
True
Как видим, символы наподобие @ и $ применимы в обоих случаях.
Еще есть метод istitle(), который проверяет строку на стиль заголовка (все слова должны начинаться с символа в верхнем регистре):
»> “The Corpse Bride”.istitle()
True
Для чего нужен pass (pass statement) в питоне?
Иногда нужно, чтобы код не давал никакого результата и не показывал ошибку, например, если еще не готово, но нужно иметь синтаксический корректный код. Можно поставить pass:
»> def func(*args):
pass
Расскажите про функции help() и dir() в питоне.
Функция help() показывает строку документации и справку для ее аргумента:
»> import copy
»> help(copy.copy)
Help on function copy in module copy: # справка по функции copy в модуле copy:
copy(x)
Shallow copy operation on arbitrary Python objects. # операция поверхностного копирования для выбранного объекта питона.
See the module”s __doc__ string for more info. № # дополнительную информацию см. в строке __doc__ этого модуля.
Функция dir() возвращает список, содержащий пространство имен в объекте:
»> dir(copy.copy)
[“__annotations__”, “__call__”, “__class__”, “__closure__”, “__code__”, “__defaults__”, “__delattr__”, “__dict__”, “__dir__”, “__doc__”, “__eq__”, “__format__”, “__ge__”, “__get__”, “__getattribute__”, “__globals__”, “__gt__”, “__hash__”, “__init__”, “__init_subclass__”, “__kwdefaults__”, “__le__”, “__lt__”, “__module__”, “__name__”, “__ne__”, “__new__”, “__qualname__”, “__reduce__”, “__reduce_ex__”, “__repr__”, “__setattr__”, “__sizeof__”, “__str__”, “__subclasshook__”]
Как получить список из всех ключей словаря (dictionary keys)?
Данная задача выполняется с помощью функции keys():
»> mydict={“a”:1,”b”:2,”c”:3,”e”:5}
»> mydict.keys()
dict_keys([“a”, “b”, “c”, “e”])
Что такое срез?
Срез — это методика, которая позволяет получить часть списка, кортежа или строки.
»> (1, 2, 3, 4, 5)[2:4]
(3, 4)
Как пишутся комментарии в питоне?
Для этого используется символ #. Все, что написано на строке после него, считается комментарием и игнорируется.
Как проверить, что все символы строки относятся к алфавитно-цифровым?
Для этого используется метод isalnum().
Как перевести первый символ строки в верхний регистр?
Для этого есть метод capitalize():
»> “ayushi”.capitalize()
“Ayushi”
Все знают, что сегодня питон в моде. Но истинное принятие новой технологии подразумевает понимание ее недостатков. Что вы можете сказать по этому поводу?
- интерпретируемая природа питона снижает скорость исполнения программы
- его не выгодно использовать для мобильных устройств и браузеров
- будучи языком с динамической типизацией данных, он использует утиную типизацию; в связи с этим появляются ошибки исполнения (runtime errors);
- в нем слабо развиты возможности доступа к базам данных; поэтому питон не идеальный вариант для приложений с очень большими базами данных;
- низкие требования на входе, то есть свои силы в питоне может попробовать каждый; это иногда снижает качество кода;
- у питона индивидуально выраженный стиль.
Как в питоне узнать, в какой мы сейчас директории?
Для этого используется функция getcwd(). Она импортируется из модуля os:
»> import os
»> os.getcwd()
“C:\Users\lifei\AppData\Local\Programs\Python\Python36-32”
Как можно обратить (reverse) порядок элементов в списке?
Для этого есть метод reverse():
»> a.reverse()
Что такое приглашение интерпретатора (interpreter prompt)?
> > >
Что нужно сделать, чтобы функция возвратила значение?
Для этого используется ключевое слово return
Что такое блок?
Когда мы пишем предложение (statement), нам нужно завершить первую строку двоеточием, а под ним написать блок кода, который исполняется в рамках этого предложения. Каждая строка блока пишется с одинаковым отступом.
Зачем нужны break и continue?
Они используются для управления последовательностью операций: break останавливает исполнение цикла и переводит исполнение на следующий блок кода, continue как бы перепрыгивает на следующую итерацию цикла и не прекращает его исполнение.
Если мы не поставим двоеточие в конце строки для цикла “do-while”, он все равно сработает?
В питоне такой цикл не реализован. Это вопрос из тех, которые с подвохом, когда упоминают элементы других языков.
Напишите в одну строку, как можно получить самую позднюю по значению букву в строке.
Значение буквы определяется по ее коду в ASCII. Для этого подойдет функция max():
»> max(“flyiNg”)
“y”
В каких областях питон имеет преимущество?
Лучше всего питон использовать в следующих областях:
- веб-приложения
- графические интерфейсы пользователя для настольных ПК
- научные и арифметические приложения
- разработка ПО
- разработка программ обучения
- приложения для бизнеса
- сетевые приложения
- игры, 3D-графика
Можете назвать десять встроенных функций питона?
Функция hash() возвращает хэш-значение объекта:
Функция input() читает ввод и возвращает строку:
Функция len() возвращает число, показывающее длину строки:
Как конвертировать список в строку?
Для этого подойдет метод join():
»> nums=[“one”,”two”,”three”,”four”,”five”,”six”,”seven”]
»> s=” “.join(nums)
»> s
“one two three four five six seven”
Как убрать из списка дубликат элемента?
Для этого можно конвертировать список во множество (set):
»> list = [1, 2, 1, 3, 4, 2]
»> set(list)
{1, 2, 3, 4}
Что такое словарь (dictionary)?
- Словари используются для хранения значений данных в парах ключ:значение.
- Словарь относится к изменяемым (mutable) объектам. Его можно создать помощью:
- литерала (символов {})
- функции dict()
- генератора (comprehension) - Словарь представляет собой упорядоченный*(>3.7) набор данных, изменяемый и не допускающий дублирования(ключей).
Расскажите про арифметические операторы //, %, и **.
Оператор // выполняет целочисленное деление и возвращает целую часть числа, полученного в результате операции:
»> 7 // 2
3
Оператор ** возводит в степень:
»> 2**10
1024
Оператор % возвращает результат деления по модулю, то есть остаток после деления:
»> 13%7
6
Что вам известно про операторы сравнения в питоне?
Оператор “меньше” (<)
Оператор “больше” (>)
Оператор “меньше или равно” (<=)
Оператор “больше или равно” (>=)
Оператор равенства (==)
Оператор неравенства (!=)
Что такое операторы присвоения в питоне?
Все арифметические операторы можно комбинировать с символом присвоения.
+=
-=
*=
/=
// =
%=
Расскажите про логические операторы в питоне.
Всего их три: and, or, not.
Что такое оператор принадлежности?
Это операторы in и not in. Они показывают, является ли одно значение частью другого.
»> “me” in “disappointment”
True
»> “us” not in “disappointment”
True
Чем отличаются операторы == от is ?
== сравнивает два операнда по значению
is сравнивает по их адресам в памяти
Какие типы данных поддерживаются в питоне?
Text Type: str
Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview
None Type: NoneType
Что такое строка документации (docstring)?
Она вносится первой строкой в блок, определяющий содержание функции, класса или метода. Содержит описание их цели и способа исполнения. Обозначается тремя одинарными или двойными кавычками с каждой стороны.
Как можно конвертировать строку в число?
Если строка содержит только числовые символы, можно использовать функцию int():
»> int(“227”)
227
Как можно принять результат ввода на клавиатуре?
Если пользователь что-то вводит с помощью клавиатуры, можно использовать функцию input()
Что такое функция?
Функция — это блок кода, который запускается только при вызове.
Вы можете передавать данные, известные как параметры, в функцию.
В результате функция может возвращать данные.
В Python функция определяется с помощью ключевого слова def
Чтобы вызвать функцию, используйте имя функции, за которым следуют круглые скобки
С точки зрения функции:
Параметр — это переменная, указанная в скобках в определении функции.
Аргумент — это значение, которое передается функции при ее вызове.
Что такое рекурсия?
Это когда функция вызывает саму себя. При этом она должна иметь базовое условие, чтобы не создать бесконечный цикл:
»> def facto(n):
if n == 1: return 1
return n * facto(n - 1)
»> facto(4)
24
Что делает функция zip()?
Возвращает итератор с кортежами:
»> list(zip([“a”, “b”, “c”],[1, 2, 3]))
[(“a”, 1), (“b”, 2), (“c”, 3)]
В данном случае она совмещает элементы двух списков и создает из них кортежи. Работает не только со списками.
Как посчитать длину строки (string)?
Для этого вызываем функцию len():
»> len(“Ayushi Sharma”)
13
Функция len()возвращает количество элементов в объекте.
Расскажите про генераторы списков (list comprehension).
Они позволяют создавать списки с помощью одной строки кода:
»> [i for i in range(1, 11, 2)]
[1, 3, 5, 7, 9]
fruits = [“apple”, “banana”, “cherry”, “kiwi”, “mango”]
newlist = [x for x in fruits if “a” in x]
print(newlist)
Как можно получить все значения из словаря?
Для этого используется метод values()
»> a = {“a”:1,”b”:2,”c”:3,”d”:4}
»> a.values
dict_values([1, 2, 3, 4])
Как можно переключить регистр строки?
Можно использовать метод swapcase(), предусмотренный для класса str:
»> “AyuShi”.swapcase()
“aYUsHI”
Возьмем строку “I love Python”. Напишите код, который выведет символы до буквы “t”.
> > > s = “I love Python”
i = 0
while s[i] != “t”:
print(s[i], end=””)
i += 1
I love Py
mylist = ‘I love Python’
for i in mylist:
if i != ‘t’:
print(i, end=’’)
else:
break
Возьмем строку “I love Python”. Напишите код, который выведет эту строку без пробелов.
> > > s = “I love Python”
for i in s:
if i == ‘ ‘: continue
print(i, end=’’)
IlovePython
Возьмем строку “I love Python”. Напишите код, который выведет эту строку пять раз подряд.
> > > s = “I love Python”
for i in range(6):
print(s)
I love Python
I love Python
I love Python
I love Python
I love Python
Создайте новый лист с помощью конвертации списка числовых строк в список чисел.
> > > nums = [‘22’, ’68’, ’110’, ’89’, ’31’, ’12’]
Теперь возьмем функцию int() и создадим генератор списка, который конвертирует строки в числа и внесет их в список:
[int(i) for i in nums]
[22, 68, 110, 89, 31, 12]
Какой результат выводит данный код
»> def extendList(val, list=[]):
list.append(val)
return list
»> list1 = extendList(10)
»> list2 = extendList(123,[])
»> list3 = extendList(‘a’)
»> list1, list2, list3
def extendList(val, list=[]): list.append(val) return list list1 = extendList(10) list2 = extendList(123,[]) list3 = extendList('a') list1, list2, list3 [10, ‘a’], [123], [10, ‘a’]
Возможный, но неверный ответ: ([10], [123], [‘a’])
В функции есть аргумент list=[], который не запускается в нулевом значении при каждом вызове этой функции. Когда мы первый раз определяем функцию, она создает новый список. Затем, каждый раз, когда мы вызываем данную функцию без аргумента-списка, она использует один и тот же список. Питон исполняет выражения, которые имеют нулевые значения, при определении функции, а не при вызове функции.
Сколько аргументов может принять range()?
Функция range()возвращает последовательность чисел, начиная с 0 по умолчанию и увеличиваясь на 1 (по умолчанию), и останавливается перед указанным числом.
От одного до трех
range(start, stop, step)
Что такое РЕР8?
Это соглашение о программировании в питоне, которое содержит рекомендации для повышения читаемости кода.
Чем Python отличается от Java?
Если сравнивать Python и Java:
- Java быстрее
- Python использует отступы, а Java нужны скобки
- в Python динамическая типизация, а в Java — статическая
- Python — простой и лаконичный, а Java — многословный язык
- Python — интерпретируемый язык
- Java не зависит от используемой платформы
- в Java есть интерфейс JDBC, который улучшает доступ к базам данных
Как лучше всего поменять местами числовые значения объектов?
> > > a, b = b, a
Как выполняется этот код:
> > > a, b = 2, 3
a, b = b, a
a, b
(3, 2)
Как можно выполнить несколько операций присвоения в одном предложении?
Первый способ (несколько объектов с уникальными значениями):
»> a, b, c = 3, 4, 5
Второй способ (несколько объектов с идентичными значениями):
»> a = b = c = 3
Как выйти из бесконечного цикла?
Можно нажать комбинацию клавиш Ctrl+C, которая прерывает исполнение.
Как исполняется код в питоне?
Файлы питона сначала компилируются в байткод, который затем исполняется.
Что такое with в питоне?
Менеджер контекста позволяющий автоматически закрывать файл
Чем файл .pyc отличается от .py
Оба файла содержат байткод, но .pyc является компилированной версией файла питона. Его байткод не зависит от платформы, поэтому он исполняется на всех платформах, которые поддерживают формат .pyc.
Что делает питон объектно-ориентированным?
Он следует парадигме объектно-ориентированного программирования, которая построена вокруг классов (classes) и их экземпляров (instances). Это позволяет реализовать следующие функции:
- сокрытие внутренней структуры данных
- абстракция
- наследование
- полиморфизм (способность выбирать правильный метод в зависимости от типа данных)
- ограничение доступа к данным
Какие есть типы объектов в питоне?
В питоне поддерживаются изменяемые (mutable) и не изменяемые (immutable) типы объектов.
Не изменяемые не позволяют изменять свое содержание. Примеры: кортежи, булевы, строки, числа. Итерация по ним выполняется быстрее.
Изменяемые позволяют изменять свое содержание. Примеры: списки, множества и словари. Итерация по ним выполняется медленнее.
Когда в блоке try-except исполняется элемент else?
В блоке if-else элемент else исполняется в случае, если условие в операторе if (if statement) является неверным (False). А вот в блоке try-except элемент else исполняется только в случае, если элемент try не выдает исключение.
try:
print(x)
except:
print(“Something went wrong”)
else:
print(‘gggggg’)
finally:
print(“The ‘try except’ is finished”)
Допустим, есть список nums=[0,1,2,3,4]. Что означает nums[-1]?
Данный код не будет выдавать исключение. nums[-1] — это 4, потому что движение по элементам начинается справа.
Что такое переменная PYTHONPATH?
PYTHONPATH — эта переменная сообщает интерпретатору путь до файлов модуля, импортированных в программу. Поэтому она должна включать в себя директорию с библиотекой-источником питона и директории с исходным кодом питона. Переменную PYTHONPATH можно назначить самостоятельно, однако обычно ее предустанавливает установщик питона.
Расскажите про функции join() и split() в Python.
Метод join()берет все элементы в итерируемом объекте и объединяет их в одну строку.
В качестве разделителя должна быть указана строка.
»> ‘,’.join(‘12345’)
‘1,2,3,4,5’
Метод split()разбивает строку на список.
Вы можете указать разделитель, по умолчанию разделителем является любой пробел.
»> ‘1,2,3,4,5’.split(‘,’)
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
Расскажите, какая будет выдача у этого кода:
x=[‘ab’,’cd’]
print(len(map(list,x)))
Здесь будет ошибка определения типа (TypeError). Ее причиной является отсутствие атрибута len() у функции map(). Это можно проверить функцией dir().
x=[‘ab’,’cd’]
def func(n):
return len(n)
a = map(func, x)
print(list(a))
Функция dir()
Функция dir()возвращает все свойства и методы указанного объекта без значений.
Эта функция вернет все свойства и методы, даже встроенные свойства, которые используются по умолчанию для всех объектов
Функция map()
Встроенная функция map(function, iterable) применяет функцию function ко всем элементам итерируемого объекта iterable.
Как результат функция map() возвращает объект типа map. Этот объект — последовательность, элементы которой — результат применения function к элементам iterable. Объект map можно преобразовать, например, в список или иную коллекцию.
def myfunc(n):
return len(n)
x = map(myfunc, (‘apple’, ‘banana’, ‘cherry’))
print(list(x))
Утиная типизация
Крякает с крыльями - значит утка
Утиная типизация – это концепция, характерная для языков
программирования с динамической типизацией, согласно которой
конкретный тип или класс объекта не важен, а важны лишь свойства и
методы, которыми этот объект обладает. Другими словами, при работе с
объектом его тип не проверяется, вместо этого проверяются свойства и
методы этого объекта. Такой подход добавляет гибкости коду, позволяет
полиморфно работать с объектами, которые никак не связаны друг с
другом и могут быть объектами разных классов. Единственное условие,
чтобы все эти объекты поддерживали необходимый набор свойств и
методов.
> > > class Meter:
… def __len__(self):
… return 1_000
…
len([1, 2, 3])
3
len(“Duck typing…”)
14
len(Meter())
1000
В примере выше функции len не важен тип аргумента, а важно лишь то,
что у объекта можно вызвать метод __len__().
Инкапсуляция - в объектно-ориентированном программировании
Инкапсуляция - в объектно-ориентированном программировании - сокрытие внутренней структуры данных и реализации методов объекта от остальной программы. Другим объектам доступен только интерфейс объекта, через который осуществляется все взаимодействие с ним.
Полиморфизм
Полиморфизм — очень важная идея в программировании. Это возможность работы с совершенно разными объектами (языка Питон) единым образом.
Декораторы
декораторы — это паттерн проектирования. По сути, просто своеобразные «обёртки», которые дают нам возможность делать что-либо до и после того, что сделает декорируемая функция, не изменяя её.
Можно ли изменить отдельный символ внутри строки?
Нет, строки неизменяемы. Операции замены, форматирования и конкатенации возвращают новую строку.
Что может являться ключом словаря? Что не может? Почему?
Ключом словаря может быть любой неизменяемый объект: число, строка, datetime, функция и даже модуль. Такие объекты имеют метод __hash__(), который однозначно сопоставляет объект с некоторым числом. По этому числу словарь ищет значение для ключа.
Списки, словари и множества изменяемы и не имеют метода хеширования. При подстановке их в словарь возникнет ошибка.
Есть два списка – ключи и значения. Как составить из них словарь?
keys = [‘foo’, ‘bar’, ‘baz’]
vals = [1, 2, 3]
dict(zip(keys, vals))
»> {‘baz’: 3, ‘foo’: 1, ‘bar’: 2}
Функция zip отдает список пар N-ых элементов. Конструктор dict принимает список пар. Каждую пару он рассматривает как ключ и значение соответственно.
Где быстрее поиск элемента -— в списке или множестве?
Во множестве, потому что множество работает как словарь. Значение ищется по хешу ключа. Вычисление хеша и сопоставление адреса – операции постоянной сложности, поэтому принято говорить, что поиск в словаре равен O(1).
Исключение работает только для очень маленьких списков длиной до 5 элементов. В этом случае интерпретатору будет быстрей пробежаться по списку, чем считать хеш.
Ключевое слова del()
Ключевое слово del используется для удаления объектов. В Python все является объектом, поэтому ключевое слово del также может использоваться для удаления переменных, списков или частей списка и т. д.
del MyClass
Удалить переменную:
x = “hello”
del x
Удалить первый элемент в списке:
x = [“apple”, “banana”, “cherry”]
del x[0]
Функция open()
Функция open() принимает два параметра; имя файла и режим .
Ключевая функция для работы с файлами
f = open(“demofile.txt”)
f = open(“demofile.txt”, ‘rt’)
Поскольку “r”для чтения и “t”для текста используются значения по умолчанию, указывать их не нужно.
Существует четыре различных метода (режима) открытия файла:
“r”- Чтение - Значение по умолчанию. Открывает файл для чтения, ошибка, если файл не существует
“a”- Append - открывает файл для добавления, создает файл, если он не существует
“w”- Write - открывает файл для записи, создает файл, если он не существует
“x”- Create - Создает указанный файл, возвращает ошибку, если файл существует
Кроме того, вы можете указать, следует ли обрабатывать файл в двоичном или текстовом режиме.
“t”- Текст - значение по умолчанию. Текстовый режим
“b”- Двоичный - Двоичный режим (например, изображения)
Что такое *args, **kwargs, в каких случаях они требуются?
Этот синтаксис означает, что функция готова принять любое количество позиционных (*args от arguments) и именованных (**kwargs от keyword arguments) аргументов.
С переменной *args можно работать как с кортежем, а с переменной **kwargs — как со словарём.
Оператор «звёздочка»
Этот оператор позволяет «распаковывать» объекты, внутри которых хранятся некие элементы. Вот пример:
a = [1,2,3]
b = [*a,4,5,6]
print(b) # [1,2,3,4,5,6]
Тут берётся содержимое списка a, распаковывается, и помещается в список b.
Как в питоне реализованы public, private, protected методы?
Модификаторы доступа
Что такое lambda функция?
Небольшая анонимная функция. Может принимать любое количество аргументов, но имеет только одно выражение.
Область видимости переменных
Область видимости или scope определяет контекст переменной, в рамках которого ее можно использовать. В Python есть два типа контекста: глобальный и локальный.
Область видимости переменных
Глобальный контекст
Глобальный контекст подразумевает, что переменная является глобальной, она определена вне любой из функций и доступна любой функции в программе. Например:
name = “Tom”
def say_hi():
print(“Hello”, name)
def say_bye():
print(“Good bye”, name)
say_hi()
say_bye()
Область видимости переменных
Локальный контекст
В отличие от глобальных переменных локальная переменная определяется внутри функции и доступна только из этой функции, то есть имеет локальную область видимости:
Множество(set)
Множество(set) - это неупорядоченная коллекция данных, состоящая из уникальных значений.
Абстрактные методы
Методы которые обязательно нужно переопределять в дочерних классах и которые не имеют своей собственной реализации называются абстрактными
Пример полиморфизма и абстрактного метода
class Geom:
def get_pr(self):
raise NotImplementedError(“В дочернем классе надо переопределить метод get_pr”)
class Rectangle(Geom):
def __init__(self, w, h):
self.w = w
self.h = h
def get_pr(self): return 2*(self.w + self.h)
class Square(Geom):
def __init__(self, a):
self.a = a
def get_pr(self): return 4*self.a
class Triangle(Geom):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def get_pr(self): return self.a + self.b + self.c
geom = [Rectangle(1, 2),
Square(10),
Triangle(4, 4, 5)
]
for g in geom:
print(g.get_pr())
Принципы SOLID
Single Responsibility Principle(принцип единственной ответственности)
Это о том что каждый класс при разработке того или иного проекта должен выполнять строго обозначенную функцию, т.е. ограничен только своей задачей.
Принципы SOLID
Open-Closed Principle(принцип открытости-закрытости)
Этот принцип предполагает что эти классы должны быть закрыты для модификаций, но открыты для расширений
Принципы SOLID
Liskov Substitution Principle(принцип подстановки БарбарыЛисков)
Подклассы должны заменять свои базовые классы, буквально следующее - если у нас есть какой-то дочерний класс, то он должен полностью повторять функционал своего базового класса.
Принципы SOLID
Interface Segregation Principle(принцип разделения интерфейса)
Нужно создавать узко-специализированные интерфейсы, предназначенные для конкретного клиента.
Принципы SOLID
Dependency Inversion Principle(принцип инверсии зависимостей)
Наши классы должны зависить от интерфейсов или абстракных классов, а не от конкретных классов и функций.
Замыкание (closure)
В контексте функции hello() значением passed_variable будет строка ‘Привет’
Замыкание (closure) — это способность вложенной функции запоминать локальное состояние контекстной области объемлющей функции.
def some_func(passed_variable): def inside_func(passed_inside_variable): return f'{passed_variable}, {passed_inside_variable}' return inside_func
Создали функцию hello()
hello = some_func(‘Привет’)
Вызываем hello() с параметром для inside_func()
print(hello(‘Стёпа’))
# Будет напечатано: Привет, мИША
Регулярные выражения (англ. regular expressions или regExp)
Регулярные выражения (англ. regular expressions или regExp) — это самостоятельный язык, предназначенный для поиска строк и проверки их на соответствие какому-то шаблону.
Как в Python передаются аргументы в функцию?
Аргументы в функцию передаются либо по значениям, либо по ссылкам. Неизменяемые типы данных передаются по значениям, изменяемые работают по ссылкам.
Что такое аннотация типов, зачем они нужны, когда выполняются?
Это подсказки говорящие о том какой тип данных ожидается, от того или иного объекта. Они не выполняются в рантайме. Хотя современные IDE подсветят если тип отличается от ожидаемого
Что такое глубокая и поверхностная копии? Зачем нужны? Как сделать?
import copy some_list = [1, [2], 3] print(some_list is copy.deepcopy(some_list)) print(some_list[1] is copy.deepcopy(some_list)[1]) print(some_list is copy.copy(some_list)) print(some_list[1] is copy.copy(some_list)[1])
False
False
False
True
copy копирует внешний объект, внутренние оставляя теми же
deepcopy копирует все, касается изменяемых типов данных
Что такое виртуальное окружение?
Это такая песочница, которая обособляет Питон, часть библиотек стандартных и позволяет работать нам в этой песочницене не засоряя глобальный Питон
Массивы Python
Массив — это специальная переменная, которая может содержать более одного значения одновременно.
Python не имеет встроенной поддержки массивов, но вместо этого можно использовать списки Python (list)
* append() Adds an element at the end of the list
* clear() Removes all the elements from the list
* copy() Returns a copy of the list
* count() Returns the number of elements with the specified value
* extend() Add the elements of a list (or any iterable), to the end of the current list
* index() Returns the index of the first element with the specified value
* insert() Adds an element at the specified position
* pop() Removes the element at the specified position
* remove() Removes the first item with the specified value
* reverse() Reverses the order of the list
* sort() Sorts the list
Алгоритм
Алгоритм — это инструкция, которая описывает порядок выполнения действий.
Массив
Массив — это набор однотипных данных, расположенных в памяти друг за другом. Поэтому он всегда занимает один непрерывный участок памяти.
Реаллокация
Как правило, при расширении массива программе приходится произвести «реаллокацию» — выделить новый участок памяти и скопировать туда старое содержимое.
Связный список
В связном списке у каждого элемента, помимо его значения, есть ссылка на следующий элемент списка. За исключением последнего — он ссылается в никуда.
class Node:
def __init__(self, value=None, next=None):
self.value = value
self.next = next
def print_linked_list(vertex):
while vertex:
print(vertex.value, end=” -> “)
vertex = vertex.next
print(“None”)