python questions Flashcards

1
Q

В чем разница между списком и кортежем

A

Список можно изменить после создания.

Кортеж нельзя изменить после создания.

Список упорядочен. Он представляет собой упорядоченные последовательности объектов, как правило, одного и того же типа. Например, все имена пользователей упорядочены по дате создания: [“Seth”, “Ema”, “Eli”].

У кортежа есть структура. В каждом индексе могут сосуществовать различные типы данных. Например, такая запись базы данных в памяти: (2, “Ema”, “2020–04–16”) # id, name, created_at.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как выполняется интерполяция строк?

A

name = ‘Chris’

# 1. f strings
print(f'Hello {name}')
# 2. % operator
print('Hey %s %s' % (name, name))
# 3. format
print(
 "My name is {}".format((name))
)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

В чем разница между is и ==?

A

is проверяет идентичность, а == проверяет равенство
a = [1,2,3]
b = a
c = [1,2,3]

print(a == b)
print(a == c)
#=> True
#=> True
print(a is b)
print(a is c)
#=> True
#=> False
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое декоратор?

A

Декоратор позволяет добавить новую функциональность к существующей функции. Это делается следующим образом. Функция передается декоратору, а он выполняет и существующий, и дополнительный код.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Объясните функцию range

A

Range генерирует список целых чисел. Ее можно использовать тремя способами.

range(start, stop, step)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Определите класс car с двумя атрибутами: color и speed. Затем создайте экземпляр и верните speed

A
class Car :
    def \_\_init\_\_(self, color, speed):
        self.color = color
        self.speed = speed
car = Car('red','100mph')
car.speed
#=> '100mph'
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

В чем разница между методами экземпляра, класса и статическими методами в Python?

A

Методы экземпляра: принимают параметр self и относятся к определенному экземпляру класса.

Статические методы: используют декоратор @staticmethod, не связаны с конкретным экземпляром и являются автономными (атрибуты класса или экземпляра не изменяются).

Методы класса: принимают параметр cls, можно изменить сам класс.
class CoffeeShop:
    specialty = 'espresso'
    def \_\_init\_\_(self, coffee_price):
        self.coffee_price = coffee_price
    # instance method
    def make_coffee(self):
        print(f'Making {self.specialty} for ${self.coffee_price}')
    # static method    
    @staticmethod
    def check_weather():
        print('Its sunny')
    # class method
    @classmethod
    def change_specialty(cls, specialty):
        cls.specialty = specialty
        print(f'Specialty changed to {specialty}')
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

как работает функция reduce?

A

reduce принимает функцию и последовательность — и проходит по этой последовательности. На каждой итерации в функцию передаются как текущий элемент, так и выходные данные предыдущего элемента. В конце концов, возвращается одно значение:

from functools import reduce
def add_three(x,y):
    return x + y
li = [1,2,3,5]
reduce(add_three, li)
#=> 11
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

как работает функция filter?

A

Каждый элемент передается функции, которая включает его в последовательность, если по условию получает True, и отбрасывает в случае False:

def add_three(x):
    if x % 2 == 0:
        return True        
    else:
        return False

li = [1,2,3,4,5,6,7,8]

[i for i in filter(add_three, li)]
#=> [2, 4, 6, 8]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Переменные в Python передаются по ссылке или по значению?

A

В общем, все имена передаются по ссылке, но в некоторых ячейках памяти хранятся объекты, а в других — указатели на другие ячейки памяти.

name = ‘object’

Давайте посмотрим, как это работает со строками. Создадим экземпляр имени и объекта, на который указывают другие имена. Затем удалим первое:

x = ‘some text’
y = x
x is y #=> True

del x # удаляем имя ‘a’ , но не объект в памяти

z = y
y is z #=> True

Мы видим, что все имена указывают на один и тот же объект в памяти, который остался нетронутым после операции удаления имени del x.

Вот еще один интересный пример с функцией:

name = 'text'
def add_chars(str1):
    print( id(str1) ) #=> 4353702856
    print( id(name) ) #=> 4353702856
    # новое имя, тот же объект
    str2 = str1
    # создаем новое имя (не отличается от предыдущего) и новый объект
    str1 += 's' 
    print( id(str1) ) #=> 4387143328
    # объект не изменился
    print( id(str2) ) #=> 4353702856

add_chars(name)
print(name) #=>text

Обратите внимание, что добавление буквы s в строку внутри функции создает новое имя — и новый объект тоже. Даже если у нового объекта то же самое имя, что и у существующего.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как развернуть список?

A

Обратите внимание, что reverse() вызывается в списке и изменяет его. Сама функция не возвращает измененный список:

li = [‘a’,’b’,’c’]

print(li)
li.reverse()
print(li)
#=> ['a', 'b', 'c']
#=> ['c', 'b', 'a']
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Как работает умножение строк?

A
'cat' * 3
#=> 'catcatcat'
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как работает умножение списка?

A
[1,2,3] * 2
#=> [1, 2, 3, 1, 2, 3]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что означает self в классе?

A

Self ссылается на экземпляр класса. Так метод может обновлять объект, к которому принадлежит.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Как объединить списки в Python?

A

Списки объединяются при сложении. Обратите внимание, что с массивами так не получается:

a = [1,2]
b = [3,4,5]
a + b
#=> [1, 2, 3, 4, 5]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

В чем разница между списками и массивами?

A

Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально обсуждаем массив из популярной библиотеки Numpy.

Списки в каждом индексе можно заполнять разными типами данных. Массивы требуют однородных элементов.

Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.

Массивы используют меньше памяти и обладают значительно большей функциональностью.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Как объединить два массива?

A

Помните, что массивы — это не списки. Это библиотека Numpy и здесь работает линейная алгебра.

Для объединения массивов нужно использовать соответствующую функцию Numpy:

import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])
np.concatenate((a,b))
#=> array([1, 2, 3, 4, 5, 6])
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Назовите изменяемые и неизменяемые объекты

A

Неизменяемость означает, что состояние нельзя изменить после создания. Примеры: int, float, bool, string и tuple.

Состояние изменяемых объектов можно изменить. Примеры: list, dict и set.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Как округлить число до трех десятичных знаков?

A

Используйте функцию round(value, decimal_places):

a = 5.12345
round(a,3)
#=> 5.123
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Что нужно сделать с классом, чтобы он стал итерируемым?

A

Реализовать функцию __iter__

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

методы итератора

A

next с exception stop iteration

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Как разбить список?

A

Синтаксис функции включает три аргумента: list[start:stop:step], где step — это интервал, через который возвращаются элементы:

a = [0,1,2,3,4,5,6,7,8,9]

print(a[:2])
#=> [0, 1]
print(a[8:])
#=> [8, 9]
print(a[2:8])
#=> [2, 3, 4, 5, 6, 7]
print(a[2:8:2])
#=> [2, 4, 6]
23
Q

Что такое pickle?

A

Pickle — это модуль сериализации и десериализации объектов в Python.

В примере ниже мы сериализуем и десериализуем список словарей:

import pickle

obj = [
{‘id’:1, ‘name’:’Stuffy’},
{‘id’:2, ‘name’: ‘Fluffy’}
]

with open('file.p', 'wb') as f:
    pickle.dump(obj, f)
with open('file.p', 'rb') as f:
    loaded_obj = pickle.load(f)
print(loaded_obj)
#=> [{'id': 1, 'name': 'Stuffy'}, {'id': 2, 'name': 'Fluffy'}]
24
Q

Какая разница между словарями и JSON?

A

Dict (словарь) — это тип данных Python, представляющий собой набор индексированных, но неупорядоченных пар ключ-значение.

JSON — просто строка, которая следует заданному формату и предназначена для передачи данных.

25
Q

Как работают any() и all()?

A

Any возвращает true, если хоть один элемент в последовательности соответствует условию, то есть является true.

All возвращает true только в том случае, если условию соответствуют все элементы в последовательности.

26
Q

Где быстрее поиск: в словарях или списках?

A

Поиск значения в списке занимает O(n) времени, потому что нужно пройти весь список.

Поиск ключа в словаре занимает O(1) времени, потому что это хэш-таблица.

27
Q

В чем разница между модулем и пакетом?

A

Модуль — это файл или набор файлов, которые импортируются вместе:

import sklearn

Пакет — это каталог с модулями:

from sklearn import cross_validation

Таким образом, пакеты — это модули, но не все модули являются пакетами.

28
Q

Как увеличить и уменьшить целое число в Python?

A

Инкремент и декремент можно сделать с помощью += и -=:

value = 5

value += 1
print(value)
#=> 6

value -= 1
value -= 1
print(value)
#=> 4

29
Q

Что нужно чтобы класс реализовал менеджер контекста?

A

Класс должен содержать методs enter и exit

30
Q

Как вернуть двоичный код целого числа?

A

Используйте функцию bin():

bin(5)
#=> '0b101'
31
Q

Как удалить из списка дубликаты?

A

Это можно сделать путем преобразования списка в набор, а затем обратно в список:

a = [1,1,1,2,3]
a = list(set(a))
print(a)
#=> [1, 2, 3]
32
Q

Как проверить, существует ли значение в списке?

A

Используйте in:

'a' in ['a','b','c']
#=> True
'a' in [1,2,3]
#=> False
33
Q

В чем разница между append и extend?

A

append добавляет значения в список, а extend добавляет в список значения из другого списка:

a = [1,2,3]
b = [1,2,3]
a.append(6)
print(a)
#=> [1, 2, 3, 6]
b.extend([4,5])
print(b)
#=> [1, 2, 3, 4, 5]
34
Q

Как объединить два списка в список кортежей?

A

Для объединения в список кортежей можно использовать функцию zip, причем не только двух, но трех и более списков.

a = ['a','b','c']
b = [1,2,3]
[(k,v) for k,v in zip(a,b)]
#=> [('a', 1), ('b', 2), ('c', 3)]
35
Q

Как отсортировать словарь по ключам, в алфавитном порядке?

A

Нельзя «отсортировать» словарь, поскольку словари не поддерживают упорядочение, но можно вернуть отсортированный список кортежей с ключами и значениями из словаря:

d = {‘c’:3, ‘d’:4, ‘b’:2, ‘a’:1}

sorted(d.items())
#=> [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
36
Q

Как реализуется наследование классов в Python?

A

В приведенном ниже примере класс Audi является наследником Car. И вместе с этим наследуются методы экземпляра родительского класса:

class Car():
    def drive(self):
        print('vroom')
class Audi(Car):
    pass
audi = Audi()
audi.drive()
37
Q

Как удалить все пробелы из строки?

A

Можно разделить строку в местах пробелов, а затем снова соединить без пробелов:

s = ‘A string with white space’

''.join(s.split())
#=> 'Astringwithwhitespace'
#более каноничный способ замены
s = 'A string with white space'
s.replace(' ', '')
#=> 'Astringwithwhitespace'
38
Q

Почему мы используем enumerate() при итерации последовательности?

A

enumerate() позволяет отслеживать индекс при итерации последовательности. Это более нативный способ, чем определение и приращение целого числа, представляющего индекс:

39
Q

модуль collections

A

namedtuple() - factory function for creating tuple subclasses with named fields

deque - list-like container with fast appends and pops on either end

ChainMap - dict-like class for creating a single view of multiple mappings

Counter - dict subclass for counting hashable objects

OrderedDict - dict subclass that remembers the order entries were added

defaultdict - dict subclass that calls a factory function to supply missing values

UserDict - wrapper around dictionary objects for easier dict subclassing

UserList - wrapper around list objects for easier list subclassing

UserString - wrapper around string objects for easier string subclassing

40
Q

В чем разница между pass, continue и break?

A

Заглушка pass означает «ничего не делать». Обычно мы используем эту функцию, потому что Python не позволяет создавать класс, функцию или оператор if без кода внутри.

В приведенном ниже примере вылетит ошибка, если внутри i > 3 не будет кода, поэтому мы используем pass:

a = [1,2,3,4,5]
for i in a:
    if i > 3:
        pass
    print(i)
#=> 1
#=> 2
#=> 3
#=> 4
#=> 5
41
Q

В чем разница между pass, continue и break?

A

Заглушка pass означает «ничего не делать». Обычно мы используем эту функцию, потому что Python не позволяет создавать класс, функцию или оператор if без кода внутри.

continue отправляет вас к следующему элементу в цикле, останавливая выполнение для текущего элемента. Таким образом, print(i) никогда не получает значения i < 3

break прерывает цикл, и последовательность больше не повторяется. Таким образом, на цифре 3 цикл прерывается, а этот и следующие элементы не печатаются:

42
Q

Приведите пример тернарного оператора

A

Тернарный (условный) оператор — это однострочный оператор if/else.

Синтаксис такой: a if condition else b.

43
Q

Проверьте, что в строке только числа

A

Можно использовать isnumeric():

'123a'.isnumeric()
#=> False
'123'.isnumeric()
#=> True
44
Q

Проверьте, что в строке только буквы

A

Можно использовать isalpha():

'123a'.isalpha()
#=> False
'a'.isalpha()
#=> True
45
Q

Проверьте, что в строке только буквы и цифры

A

Здесь можно использовать isalnum():

'123abc...'.isalnum()
#=> False
'123abc'.isalnum()
#=> True
46
Q

Получите список ключей из словаря

A

Это можно сделать через передачу словаря в конструктор list():

d = {‘id’:7, ‘name’:’Shiba’, ‘color’:’brown’, ‘speed’:’very slow’}

list(d)
#=> ['id', 'name', 'color', 'speed']
47
Q

Как перевести строку в верхний/нижний регистр?

A

Можно использовать строковые методы upper() и lower():

small_word = 'potatocake'
big_word = 'FISHCAKE'
small_word.upper()
#=> 'POTATOCAKE'
big_word.lower()
#=> 'fishcake'
48
Q

В чем разница между remove, del и pop?

A

remove() удаляет первое совпадающее значение:

li = [‘a’,’b’,’c’,’d’]

li.remove(‘b’)
li
#=> [‘a’, ‘c’, ‘d’]

del удаляет элемент по его индексу:

li = [‘a’,’b’,’c’,’d’]

del li[0]
li
#=> ['b', 'c', 'd']

pop() удаляет элемент по индексу и возвращает этот элемент:

li = [‘a’,’b’,’c’,’d’]

li.pop(2)
#=> 'c'
li
#=> ['a', 'b', 'd']
49
Q

Приведите пример генератора словарей (dict comprehension)

A
# создаем список букв
import string
list(string.ascii_lowercase)
alphabet = list(string.ascii_lowercase)
# генерация словаря
d = {val:idx for idx,val in enumerate(alphabet)}
50
Q

Как выполняется обработка исключений в Python?

A

Для обработки исключений Python предоставляет конструкцию из трех слов: try, except и finally.

Синтаксис выглядит примерно так:

try:
    # попробовать сделать это
except:
    # если блок try не сработал, попробовать это
finally:
    # всегда делать это

Ниже упрощенный пример такой конструкции. Здесь блок try терпит неудачу, поскольку мы не можем складывать целые числа со строками. Блок except устанавливает val = 10, а затем блок finally выводит complete:

try:
    val = 1 + 'A'
except:
    val = 10
finally:
    print('complete')
print(val)
#=> complete
#=> 10
51
Q

Что такое лямбда-функция?

A

Анонимная или неназванная функция называется лямбда-функцией. Она может иметь любое количество параметров, но только один оператор. Она часто используется как одноразовая функция, а не многоразовая.

52
Q

Что такое словарь в Python?

A

Словарь Python — это один из поддерживаемых типов данных. Это неупорядоченная коллекция элементов. Элементы в словарях хранятся в виде пар ключ-значение. Словари индексируются по ключам. Тип данных представлен в виде {}

53
Q

Инкапсуляция (encapsulation)

A

Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. (from codenet.ru). Инкапсуляция нужна для того, что бы пользователь не мог использовать не предназначенный для него функционал.