53 вопроса и ответа по Python для собеседования

53 вопроса и ответа по Python для собеседования

Не так давно я получил новую должность на работе. На меня возложили роль “специалиста по обработке данных”, которая, как оказалось на практике, больше походит на “Python-инженера”.

Поэтому я решил предоставить вам вопросы и ответы для подготовки к собеседованию на python. Большинство специалистов по обработке данных пишут много кода, так что данная статья точно не будет лишней ни для кого.

Независимо от того, проводите ли вы собеседования с кандидатами, готовитесь подать заявку на работу или просто осваиваете Python, я думаю, этот список будет бесценен.

Вопросы неупорядочены. Давайте начинать!

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

Мне задавали этот вопрос на каждом собеседовании по python / data science, которое я когда-либо проходил. Знай ответ как свои пять пальцев!

  • Списки изменяемы. Они могут быть изменены после создания.
  • Кортежи неизменяемы. Как только кортеж создан, он не может быть изменён
  • В списках есть порядок. Они представляют собой упорядоченные последовательности, обычно относящиеся к одному и тому же типу объектов. Пример: все имена пользователей упорядочены по дате создания, ["Seth", "Ema", "Eli"]
  • Кортежи имеют структуру. В каждом индексе могут существовать различные типы данных. Пример: запись базы данных в памяти, (2, "Ema", "2020–04–16") # id, name, created_at

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

Без импорта класса Template существует 3 способа интерполяции строк:

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))
)

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

В начале моей карьеры на python я предполагал, что это одно и то же… Итак, для справки, is проверяет идентичность, а == проверяет равенство.

Мы рассмотрим пример. Создайте несколько списков и присвойте им имена. Обратите внимание, что b указывает на тот же объект, что и a ниже.

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

Мы можем проверить это, выведя идентификаторы их объектов.

print(id(a))
print(id(b))
print(id(c))
#=> 4369567560
#=> 4369567560
#=> 4369567624

c имеет идентификатор, отличный от a и b.

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

Ещё один вопрос, который мне задавали на каждом собеседовании. Эта тема сама по себе заслуживает отдельной статьи, но вы будете готовы, если сможете написать свой собственный пример.

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

Мы напишем декоратор, который регистрирует при вызове другой функции.

Напишите функцию декоратора. Он принимает функцию func в качестве аргумента. Далее определяет функцию log_function_called, которая вызывает func() и выполняет некоторый код print(f'{func} called.'). Затем он возвращает функцию, которую он определил:

def logging(func):
  def log_function_called():
    print(f'{func} called.')
    func()
  return log_function_called

Давайте напишем другие функции, к которым мы в конечном итоге добавим декоратор (вариант без декоратора).

def my_name():
  print('chris')def friends_name():
  print('naruto')my_name()
friends_name()
#=> chris
#=> naruto

Теперь добавьте декоратор к обеим.

@logging
def my_name():
 print('chris')@logging
def friends_name():
 print('naruto')my_name()
friends_name()
#=> <function my_name at 0x10fca5a60> called.
#=> chris
#=> <function friends_name at 0x10fca5f28> called.
#=> naruto

Посмотрите, как теперь мы можем легко добавить логирование в любую функцию, просто добавив @logging над ней.

5. Объясните, как работает функция range

Данная функция генерирует список целочисленных элементов.

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

range(stop): генерирует целые числа от 0 до целого числа “stop”.

[i for i in range(10)]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(start, stop) : генерирует целые числа от “start” до “stop”.

[i for i in range(2,10)]
#=> [2, 3, 4, 5, 6, 7, 8, 9]

range(start, stop, step): генерирует целые числа от “start” до “stop” с интервалом в “step”.

[i for i in range(2,10,2)]
#=> [2, 4, 6, 8]

Спасибо Searge Boremchuq за то, что предложили более питонический способ сделать это!

list(range(2,10,2))
#=> [2, 4, 6, 8]

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

class Car :
    def __init__(self, color, speed):
        self.color = color
        self.speed = speedcar = Car('red','100mph')
car.speed
#=> '100mph'

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

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

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

Методы класса: принимают параметр cls и могут изменять сам класс

Мы собираемся проиллюстрировать разницу в классе CoffeeShop .

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}')

Класс CoffeeShop имеет атрибут specialty, для которого по умолчанию установлено значение “эспрессо”. Каждый экземпляр CoffeeShop инициализируется атрибутом coffee_price . Он также имеет 3 метода: метод экземпляра, статический метод и метод класса.

Давайте инициализируем экземпляр кофейни coffee_price, равным 5. Затем вызовем метод экземпляра make_coffee.

coffee_shop = CoffeeShop('5')
coffee_shop.make_coffee()
#=> Making espresso for $5

Теперь вызовем статический метод. Статические методы не могут изменять состояние класса или экземпляра, поэтому они обычно используются для служебных функций, например, для добавления 2 чисел. Мы использовали наш, чтобы узнать погоду. Нам сообщают, что на улице солнечная погода. Отлично!

coffee_shop.check_weather()
#=> Its sunny

Теперь давайте воспользуемся методом класса, чтобы изменить фирменное блюдо кофейни, а затем make_coffee.

coffee_shop.change_specialty('drip coffee')
#=> Specialty changed to drip coffeecoffee_shop.make_coffee()
#=> Making drip coffee for $5

Обратите внимание, что раньше make_coffee готовила espresso , а теперь делает drip coffee!

8. В чем разница между “func” и “func()”?

Цель этого вопроса – проверить, понимаете ли вы, что все функции также являются объектами в python.

def func():
    print('Im a function')
    
func
#=> function __main__.func>func()    
#=> Im a function

func – это объект, представляющий функцию, которая может быть присвоена переменной или передана другой функции. функция func() с круглыми скобками вызывает функцию и возвращает то, что она выводит.

9. Объясните, как работает функция map

map возвращает объект (итератор), который может выполнять итерацию по возвращаемым значениям в результате применения функции к каждому элементу последовательности. Объект map также может быть преобразован в список, если потребуется.

def add_three(x):
    return x + 3li = [1,2,3][i for i in map(add_three, li)]
#=> [4, 5, 6]

Читатель предложил более питоническую реализацию данного вопроса. Спасибо, Chrisjan Wust!

def add_three(x):
    return x + 3li = [1,2,3]
list(map(add_three, li))
#=> [4, 5, 6]

Также, спасибо Michael Graeme Short за исправления!

10. Объясните, как работает функция reduce

Это может быть непросто осмыслить, пока вы не воспользуетесь ей несколько раз.

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

from functools import reducedef add_three(x,y):
    return x + yli = [1,2,3,5]reduce(add_three, li)
#=> 11

Возвращается значение 11, которое является суммой 1+2+3+5 .

11. Объясните, как работает функция filter 

Filter буквально делает то, о чём говорится в названии. Она фильтрует элементы в определённой последовательности.

Каждый элемент передаётся функции, которая возвращается в выводимой последовательности, если функция возвращает True, и отбрасывается, если функция возвращает False.

def add_three(x):
    if x % 2 == 0:
        return True        
    else:
        return Falseli = [1,2,3,4,5,6,7,8][i for i in filter(add_three, li)]
#=> [2, 4, 6, 8]

Обратите внимание, что все элементы, не делящиеся на 2, были удалены.

12. Python вызывает по ссылке или по значению?

Будьте готовы провалиться в кроличью нору семантики, если вы загуглите этот вопрос и прочтёте несколько первых ответов.

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

name = 'object'

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

x = 'some text'
y = x
x is y #=> Truedel x # this deletes the 'a' name but does nothing to the object in memoryz = y
y is z #=> True

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

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

name = 'text'def add_chars(str1):
    print( id(str1) ) #=> 4353702856
    print( id(name) ) #=> 4353702856
    
    # new name, same object
    str2 = str1
    
    # creates a new name (with same name as the first) AND object
    str1 += 's' 
    print( id(str1) ) #=> 4387143328
    
    # still the original object
    print( id(str2) ) #=> 4353702856
    
    
add_chars(name)
print(name) #=>text

Обратите внимание, как добавление s к строке внутри функции создало новое имя и новый объект.

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

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

li = ['a','b','c']print(li)
li.reverse()
print(li)
#=> ['a', 'b', 'c']
#=> ['c', 'b', 'a']

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

Давайте посмотрим на результаты умножения строки ‘cat’ на 3.

'cat' * 3
#=> 'catcatcat'

Строка соединяется сама с собой 3 раза.

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

Давайте посмотрим на результат умножения списка [1,2,3] на 2.

[1,2,3] * 2
#=> [1, 2, 3, 1, 2, 3]

Выводится список, содержащий [1,2,3] дважды.

16. Что означает “self” в классе?

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

Ниже передача self в __init__() даёт нам возможность установить цвет экземпляра при инициализации.

class Shirt:
    def __init__(self, color):
        self.color = color
        
s = Shirt('yellow')
s.color
#=> 'yellow'

17. Как вы можете объединять списки в python?

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

a = [1,2]
b = [3,4,5]
c = a + b
#c == [1, 2, 3, 4, 5]

18. В чем разница между поверхностной и глубокой копией?

Мы обсудим это в контексте изменяемого объекта, списка. Для неизменяемых объектов сравнение обоих типов копий не столь актуально.

Мы рассмотрим 3 сценария:

i) Ссылание на исходный объект. Оно указывает новое имя, li2, на то же место в памяти, на которое указывает li1. Таким образом, любое изменение, которое мы вносим в li1, также происходит и с li2.

li1 = [['a'],['b'],['c']]
li2 = li1li1.append(['d'])
print(li2)
#=> [['a'], ['b'], ['c'], ['d']]

ii) Создание поверхностной копии оригинала. Мы можем сделать это с помощью функций list() или mylist.copy().

Поверхностная копия создаёт новый объект, но заполняет его ссылками на оригинал. Таким образом, добавление нового объекта в исходную коллекцию, li3, не распространяется на li4, но изменение одного из объектов в li3 будет распространяться на li4.

li3 = [['a'],['b'],['c']]
li4 = list(li3)li3.append([4])
print(li4)
#=> [['a'], ['b'], ['c']]li3[0][0] = ['X']
print(li4)
#=> [[['X']], ['b'], ['c']]

iii) Создание глубокой копии. Это делается с помощью copy.deepcopy(). Эти два объекта теперь полностью независимы, и изменения в одном из них никак не влияют на другой.

import copyli5 = [['a'],['b'],['c']]
li6 = copy.deepcopy(li5)li5.append([4])
li5[0][0] = ['X']
print(li6)
#=> [['a'], ['b'], ['c']]

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

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

  • Списки существуют в стандартной библиотеке python. Массивы определяются с помощью Numpy.
  • Списки могут быть заполнены различными типами данных по каждому индексу. Массивы требуют однотипных элементов.
  • Арифметика в списках добавляет или удаляет элементы из списка. Арифметика над функциями массивов работает как линейная алгебра.
  • Массивы также потребляют меньше памяти и обладают значительно большей функциональностью.

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

Помните, что массивы – это не списки. Массивы взяты из Numpy и арифметических функций, таких как линейная алгебра.

Для этого нам нужно использовать функции конкатенации Numpy:

import numpy as npa = np.array([1,2,3])
b = np.array([4,5,6])np.concatenate((a,b))
#=> array([1, 2, 3, 4, 5, 6])

21. Что вам нравится в Python?

Обратите внимание, что это очень субъективный вопрос. Вам стоит изменить свой ответ в зависимости от того, на что нацелена ваша роль.

Python очень удобочитаем, и существует питонический способ делать практически всё, что означает предпочтительный способ, который является ясным и кратким.

Я бы сравнил его с Ruby, где часто существует множество способов сделать что-то без указания того, какой из них предпочтительнее.

22. Какая ваша любимая библиотека в Python?

Также субъективно, см. вопрос 21.

При работе с большим количеством данных ничто так не помогает, как pandas, который упрощает манипулирование и визуализацию данных.

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

Неизменяемый объект подразумевает, что его значение не может быть изменено после создания. Примерами являются: int, float, bool, string и tuple.

Изменяемый объект подразумевает, что его значение может быть изменено после создания. Примерами являются list, dict и set.

24. Как бы вы округлили число до 3 знаков после запятой?

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

a = 5.12345
round(a,3)
#=> 5.123

25. Как вы разделите список на части?

Нотация Slicing принимает 3 аргумента, 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]

26. Что такое “консервация”?

Консервация- это универсальный метод сериализации и несериализации объектов в Python.

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

import pickleobj = [
    {'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'}]

27. В чем разница между словарями и JSON?

Dict – это тип данных python, набор индексированных, но неупорядоченных ключей и значений.

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

28. Какие ORM вы использовали в Python?

ORMs (object relational mapping) сопоставляет модели данных (обычно в приложении) с таблицами базы данных и упрощает транзакции с базой данных.

SQLAlchemy обычно используется в контексте Flask, а у Django есть свой собственный ORM.

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

Any принимает последовательность и возвращает true, если какой-либо элемент в последовательности имеет значение true.

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

a = [False, False, False]
b = [True, False, False]
c = [True, True, True]print( any(a) )
print( any(b) )
print( any(c) )
#=> False
#=> True
#=> Trueprint( all(a) )
print( all(b) )
print( all(c) )
#=> False
#=> False
#=> True

30. Поиск выполняется быстрее в словарях или в списках?

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

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

Это может привести к огромной разнице во времени, если значений много, поэтому для ускорения обычно рекомендуются словари. Но у них есть и другие ограничения, такие как необходимость в уникальных ключах.

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

Модуль – это файл (или коллекция файлов), которые могут быть импортированы вместе.

import sklearn

Пакет – это каталог модулей.

from sklearn import cross_validation

Итак, пакеты – это модули, но не все модули являются пакетами.

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

Инкременты и декременты можно выполнять с помощью +- и -= .

value = 5value += 1
print(value)
#=> 6value -= 1
value -= 1
print(value)
#=> 4

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

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

bin(5)
#=> '0b101'

34. Как удалить повторяющиеся элементы из списка?

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

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

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

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

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

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

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

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]

37. Как получить абсолютное значение целого числа?

Это можно сделать с помощью функции abs().

abs(2)
#=> 2abs(-2)
#=> 2

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

Вы можете использовать функцию zip для объединения списков в список кортежей. Она не ограничивается использованием только 2 списков. Это также можно сделать с помощью 3 или более инструментов.

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

39. Как вы можете отсортировать словарь по ключу в алфавитном порядке?

Вы не можете “отсортировать” словарь, потому что словари не имеют порядка, но вы можете вернуть отсортированный список кортежей, содержащий ключи и значения, которые есть в словаре.

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

40. Как класс наследуется от другого класса в Python?

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

class Car():
    def drive(self):
        print('vroom')class Audi(Car):
    passaudi = Audi()
audi.drive()

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

Самый простой способ – разделить строку на пробелы, а затем воссоединить её без пробелов.

s = 'A string with     white space'''.join(s.split())
#=> 'Astringwithwhitespace'

2 читателя рекомендовали более питонический способ справиться с этим, следуя принципу Python, согласно которому Explicit is better than Implicit. Он также быстрее, потому что python не создаёт новый объект списка.

s = 'A string with     white space'
s.replace(' ', '')
#=> 'Astringwithwhitespace'

42. Зачем вам использовать enumerate() при повторении последовательности?

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

li = ['a','b','c','d','e']for idx,val in enumerate(li):
    print(idx, val)
#=> 0 a
#=> 1 b
#=> 2 c
#=> 3 d
#=> 4 e

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

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

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

for i in a:
    if i < 3:
        continue
    print(i)
#=> 3
#=> 4
#=> 5

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

for i in a:
    if i == 3:
        break
    print(i)    
#=> 1
#=> 2

44. Преобразуйте следующий цикл for в списковое включение.

Было:

a = [1,2,3,4,5]
 
a2 = []
for i in a:
     a2.append(i + 1)print(a2)
#=> [2, 3, 4, 5, 6]

Стало:

a3 = [i+1 for i in a]print(a3)
#=> [2, 3, 4, 5, 6]

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

Тернарный оператор – это однострочный оператор if/else.

Синтаксис выглядит следующим образом: a если условие иначе b.

x = 5
y = 10'greater' if x > 6 else 'less'
#=> 'less''greater' if y > 6 else 'less'
#=> 'greater'

46. Как проверить, содержит ли строка только цифры?

Вы можете использовать функцию isnumeric():

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

47. Как проверить, содержит ли строка только буквы?

Вы можете использовать функцию isalpha():

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

48. Как проверить, содержит ли строка только цифры и буквы?

Вы можете использовать функцию isalnum():

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

49. Верните список ключей из словаря.

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

d = {'id':7, 'name':'Shiba', 'color':'brown', 'speed':'very slow'}list(d)
#=> ['id', 'name', 'color', 'speed']

50. Как вывести значение в верхнем или нижнем регистре?

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

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

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

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']

52. Приведите пример генератора словарей.

Ниже мы создадим словарь с буквами алфавита в качестве ключей и индексом в алфавите в качестве значений.

# creating a list of letters
import string
list(string.ascii_lowercase)
alphabet = list(string.ascii_lowercase)# list comprehension
d = {val:idx for idx,val in enumerate(alphabet)} d
#=> {'a': 0,
#=>  'b': 1,
#=>  'c': 2,
#=> ...
#=>  'x': 23,
#=>  'y': 24,
#=>  'z': 25}

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

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

Синтаксис выглядит следующим образом:

try:
    # try to do this
except:
    # if try block fails then do this
finally:
    # always do this

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

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

Заключение

Вы никогда не знаете, какие вопросы возникнут на собеседованиях, и лучший способ подготовиться – это иметь большой опыт написания кода.

Тем не менее, этот список должен охватывать практически всё, о чём вас спросят с точки зрения python для ролей специалиста по обработке данных или junior/intermediate-разработчика python.

Я надеюсь, что данная статья была так же полезно для вас, как и для меня.

Есть ли какие-нибудь важные вопросы, которые я пропустил?

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *