python questions Flashcards
В чем разница между списком и кортежем
Список можно изменить после создания.
Кортеж нельзя изменить после создания.
Список упорядочен. Он представляет собой упорядоченные последовательности объектов, как правило, одного и того же типа. Например, все имена пользователей упорядочены по дате создания: [“Seth”, “Ema”, “Eli”].
У кортежа есть структура. В каждом индексе могут сосуществовать различные типы данных. Например, такая запись базы данных в памяти: (2, “Ema”, “2020–04–16”) # id, name, created_at.
Как выполняется интерполяция строк?
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)) )
В чем разница между is и ==?
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
Что такое декоратор?
Декоратор позволяет добавить новую функциональность к существующей функции. Это делается следующим образом. Функция передается декоратору, а он выполняет и существующий, и дополнительный код.
Объясните функцию range
Range генерирует список целых чисел. Ее можно использовать тремя способами.
range(start, stop, step)
Определите класс car с двумя атрибутами: color и speed. Затем создайте экземпляр и верните speed
class Car : def \_\_init\_\_(self, color, speed): self.color = color self.speed = speed car = Car('red','100mph') car.speed #=> '100mph'
В чем разница между методами экземпляра, класса и статическими методами в Python?
Методы экземпляра: принимают параметр 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}')
как работает функция reduce?
reduce принимает функцию и последовательность — и проходит по этой последовательности. На каждой итерации в функцию передаются как текущий элемент, так и выходные данные предыдущего элемента. В конце концов, возвращается одно значение:
from functools import reduce def add_three(x,y): return x + y li = [1,2,3,5] reduce(add_three, li) #=> 11
как работает функция filter?
Каждый элемент передается функции, которая включает его в последовательность, если по условию получает 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]
Переменные в Python передаются по ссылке или по значению?
В общем, все имена передаются по ссылке, но в некоторых ячейках памяти хранятся объекты, а в других — указатели на другие ячейки памяти.
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 в строку внутри функции создает новое имя — и новый объект тоже. Даже если у нового объекта то же самое имя, что и у существующего.
Как развернуть список?
Обратите внимание, что reverse() вызывается в списке и изменяет его. Сама функция не возвращает измененный список:
li = [‘a’,’b’,’c’]
print(li) li.reverse() print(li) #=> ['a', 'b', 'c'] #=> ['c', 'b', 'a']
Как работает умножение строк?
'cat' * 3 #=> 'catcatcat'
Как работает умножение списка?
[1,2,3] * 2 #=> [1, 2, 3, 1, 2, 3]
Что означает self в классе?
Self ссылается на экземпляр класса. Так метод может обновлять объект, к которому принадлежит.
Как объединить списки в Python?
Списки объединяются при сложении. Обратите внимание, что с массивами так не получается:
a = [1,2] b = [3,4,5]
a + b #=> [1, 2, 3, 4, 5]
В чем разница между списками и массивами?
Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально обсуждаем массив из популярной библиотеки Numpy.
Списки в каждом индексе можно заполнять разными типами данных. Массивы требуют однородных элементов.
Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.
Массивы используют меньше памяти и обладают значительно большей функциональностью.
Как объединить два массива?
Помните, что массивы — это не списки. Это библиотека 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])
Назовите изменяемые и неизменяемые объекты
Неизменяемость означает, что состояние нельзя изменить после создания. Примеры: int, float, bool, string и tuple.
Состояние изменяемых объектов можно изменить. Примеры: list, dict и set.
Как округлить число до трех десятичных знаков?
Используйте функцию round(value, decimal_places):
a = 5.12345 round(a,3) #=> 5.123
Что нужно сделать с классом, чтобы он стал итерируемым?
Реализовать функцию __iter__
методы итератора
next с exception stop iteration