Недавно была на занимательном онлайн-митапе сообщества python-разработчиков, где обсуждали вопросы, которые обычно задают на собеседовании. Я думала (до этого митапа), что неплохо разбираюсь в питоне для самоучки. НЕ ТУТ-ТО БЫЛО! Эти вопросы оказались на какое-то глубинное понимание python-парадигмы.
Самое уморительное то, что докладчик не сказал на какой грейд были рассчитаны эти вопросы. Слушатели были также шокированы как и я, поэтому в опроснике большинство ответило что это вопросы уровня middle+, но кажется лектор предполагал, что это все-таки junior + (мне плохо физически)… И честно вам скажу: я не знала ответ на большинство из вопросов, но для вас (и себя) я все записала и разобралась, и сейчас все расскажу)
Слабые места у подавляющего числа соискателей.
1) Общая база computer science в том числе алгоритмы и архитектура программ
2) Внутреннее устройство Python
3) «Батарейки» в языке (я даже не знала, что такое батарейки)
4) Конкурентное программирование
5) Устройство и возможности фреймворков
А теперь самое интересное.
Конкретные задачи и их решение
Распаковка списка
items = ['Ivan', ['Petr', ['Kate'], (1, 2, 3), frozenset((4,5,6)), b'Alexandr']]
from collections.abc import Iterable
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x
print(list(flatten(items)))
Как вызывать функцию по ее строковому имени? (Реактивное программирование)
class A:
def get_data(self):
return {"a": 1, "b": 2}
a = A()
if hasattr(a, "get _data"):
target_func = getattr(a, "get_data")
print(target_func())
Количество вызовов функции
def foo():
if not hasattr(foo, 'count'):
foo.count = 0
foo.count += 1
return True
foo()
print(foo.count)
foo()
print(foo.count)
Какое исключение выпадет? (1 исключение выполняется
всегда)
try:
f = open ('my_file')
except OSError:
print('It failed')
except FileNotFoundError:
print( 'File not found')
#найм_IT #развитие