Итак. Ты уже дружишь с питоном, тебе понравилось и пришла пора искать работу.
У меня собралось много вопросов с разных собеседований меня и моих знакомых на позицию trainee/junior python dev.
Начнем с начала
Вопросы по Python для питонистов-джуниоров
1️⃣ Базовые вопросы
Какие существуют типы данных в python 3?
Какие из них изменяемые, а какие нет?
Можно ли создать множество состоящее из других множеств?
Что нужно сделать с классом, чтобы он мог стать ключом словаря?
Как работает scope в python?
2️⃣ Вопросы о вашей мотивации в python
Почему Вы выбрали python?
В чем достоинства и недостатки python как языка общего назначения?
Для каких задач используется python?
Пробовали ли Вы python 2?
Отличие python 3 и python 2.
Что нового появилось в python 3.7?
Смотрели ли вы на python 3.8?
Дзен python помните?
3️⃣ Стандартная библиотека
Какие модули стандартной библиотеки вы использовали?
Что вы знаете про модули collections, pickle?
Как работает идея абстрактных классов в python?
4️⃣ Основные вопросы python
*args, **kwargs в python?
Можно ли в python сделать бесконечную рекурсию?
Анонимные функции в python
Итератор и генератор.
Генератор выражений
Магические методы.
Магические методы __new__ и __init__
Как работает __slots__?
Структура Exceptions в python 3.
Как под капотом реализован список и словарь в python.
Built-in functions в python.
Что значит, что объект сallable.
Что такое декоратор?
Встроенные декораторы
staticmethod, classmethod - в чем разница?
Может ли classmethod быть абстрактным в терминах python 3?
Менеджеры контекста
Как в питоне реализованы public, private и protected methods?
Как импортировать приватный метод из стороннего модуля?
Классы нового стиля в python.
5️⃣ Продвинутый python
Python сразу интерпретируется интерпретатором или есть промежуточный шаг?
Диамантовая проблема в python.
MRO в python 3.
Декораторы с параметрами
Написать менеджер контекста через класс и через функцию.
Дескрипторы
Метаклассы
Удачи! Тут еще нет, как минимум, большей части вопросов про ООП, шаблонам проектирования, web разработке, тестированию, многопоточности, devops, гиту, frontendу, python фреймворкам, базам данных и другим важным темам, но список уже получился большим.
Продолжение следует...)
У меня собралось много вопросов с разных собеседований меня и моих знакомых на позицию trainee/junior python dev.
Начнем с начала
Вопросы по Python для питонистов-джуниоров
1️⃣ Базовые вопросы
Какие существуют типы данных в python 3?
Какие из них изменяемые, а какие нет?
Можно ли создать множество состоящее из других множеств?
Что нужно сделать с классом, чтобы он мог стать ключом словаря?
Как работает scope в python?
2️⃣ Вопросы о вашей мотивации в python
Почему Вы выбрали python?
В чем достоинства и недостатки python как языка общего назначения?
Для каких задач используется python?
Пробовали ли Вы python 2?
Отличие python 3 и python 2.
Что нового появилось в python 3.7?
Смотрели ли вы на python 3.8?
Дзен python помните?
3️⃣ Стандартная библиотека
Какие модули стандартной библиотеки вы использовали?
Что вы знаете про модули collections, pickle?
Как работает идея абстрактных классов в python?
4️⃣ Основные вопросы python
*args, **kwargs в python?
Можно ли в python сделать бесконечную рекурсию?
Анонимные функции в python
Итератор и генератор.
Генератор выражений
Магические методы.
Магические методы __new__ и __init__
Как работает __slots__?
Структура Exceptions в python 3.
Как под капотом реализован список и словарь в python.
Built-in functions в python.
Что значит, что объект сallable.
Что такое декоратор?
Встроенные декораторы
staticmethod, classmethod - в чем разница?
Может ли classmethod быть абстрактным в терминах python 3?
Менеджеры контекста
Как в питоне реализованы public, private и protected methods?
Как импортировать приватный метод из стороннего модуля?
Классы нового стиля в python.
5️⃣ Продвинутый python
Python сразу интерпретируется интерпретатором или есть промежуточный шаг?
Диамантовая проблема в python.
MRO в python 3.
Декораторы с параметрами
Написать менеджер контекста через класс и через функцию.
Дескрипторы
Метаклассы
Удачи! Тут еще нет, как минимум, большей части вопросов про ООП, шаблонам проектирования, web разработке, тестированию, многопоточности, devops, гиту, frontendу, python фреймворкам, базам данных и другим важным темам, но список уже получился большим.
Продолжение следует...)
Python interning
Shared objects - ranges и специфические объекты неизменяемого типа которые CPython инстанцирует и загружает в память каждый раз при запуске интерпретатора
Более того, python умеет интернировать(кешировать ASCII символы, цифры или _ в памяти во время создания новой строки) строки меньше 20 символов
Это все помогает оптимизировать работу python.
Отсюда вывод:
Python что-то ускоряет, когда может:
Пример 1
Shared objects - ranges и специфические объекты неизменяемого типа которые CPython инстанцирует и загружает в память каждый раз при запуске интерпретатора
Более того, python умеет интернировать(кешировать ASCII символы, цифры или _ в памяти во время создания новой строки) строки меньше 20 символов
Это все помогает оптимизировать работу python.
Отсюда вывод:
Python что-то ускоряет, когда может:
Пример 1
>> a = 'ee'Пример 2
>> a[0] is a[1]
True
>> a='x'
>> b='x'
>> a is b
True
>> a = 'ΩΩ'Обычно python умеет делать много чего неявно, но его можно заставить...
>> a[0] is a[1]
False
>> a='Ω'
>> b='Ω'
>> a is b
False
>> a = 'I hate frontend'
>> b = 'I hate frontend'
>> a is b
False
>> import sys
>> c = sys.intern('I hate frontend')
>> d = sys.intern('I hate frontend')
>> c is d
True
>> c is a
False
Самый простой способ узнать про неявное интернирование - проверить id объекта.>> s='*'
>> for i in range(2):
.. s+='*'
.. print(id(s), s)
140277841241232 **
140277841241232 ***Требования к джуну оn разных компаний(Python)
https://docs.google.com/document/d/17mV7eQLGrGZB98psbPT9u4vN5b4Z_BUpO_2QrQvEonM/edit#heading=h.gjdgxs
https://docs.google.com/document/d/17mV7eQLGrGZB98psbPT9u4vN5b4Z_BUpO_2QrQvEonM/edit#heading=h.gjdgxs
Google Docs
Python_Jun_ожидания
Компетентности уровня junior для Python Компании Raccoon Gang SoftServe NIX 1. Знания основ программирования. + + + 1.1 Типы языков программирования, интерпретируемые, компилируемые; + + + 1.2 Понимание понятий - переменн...
Хочу обсудить питонячье понимание модификаторов доступа.
Модификаторы доступа помогают разделить методы и переменные на не предназначенные для внешнего использования, не рекомендуемые для использования из вне и предназначенные только для использования внутри.
Для этого используются нижние подчеркивания перед именем.
Переменная с даже одним
Чтобы получить доступ к переменной с нижнем подчеркиванием нужно явно указать ее при импорте, или внести в список
В питоне, если очень хочется, то можно сделать все. (Ну почти)
Даже достучаться к приватному методу)) Это называется name mangling - искажение имен.
На самом деле питон просто сохраняет имена начинающиеся с двух подчеркиваний немного иначе
Проверим
Модификаторы доступа помогают разделить методы и переменные на не предназначенные для внешнего использования, не рекомендуемые для использования из вне и предназначенные только для использования внутри.
Для этого используются нижние подчеркивания перед именем.
class Underscore:
def method():
return 'public method'
def _method(): # одно _ работает на уровне соглашения — означает, что лучше такую переменную не трогать из вне
return 'It is better not to use this method outside'
def __method(): # два __ - питон не даст явно вызвать такой метод из вне(AttributeError)
return 'private method'
Это была простая часть. Очень известная. Но есть более продвинутые штуки.Переменная с даже одним
_ - не импортируется звездочкойfrom module import *
Стандартно будут импортироваться только public methods.Чтобы получить доступ к переменной с нижнем подчеркиванием нужно явно указать ее при импорте, или внести в список
__all__ импортируемого модуля.from module import _var
*Кстати, питонисты используют нижнее подчеркивание в конце имени, чтобы избежать конфликтов имен. Про это читай в PEP8В питоне, если очень хочется, то можно сделать все. (Ну почти)
Даже достучаться к приватному методу)) Это называется name mangling - искажение имен.
На самом деле питон просто сохраняет имена начинающиеся с двух подчеркиваний немного иначе
class Magic:
def __private(self):
return 'I am private AF'
Попробуем вызвать методmagic = Magic()
magic.__private()
Получим ожидаемое:AttributeError: 'Magic' object has no attribute '__private'
На самом деле питон создал этот метод, но с именем _Magic__private, то есть долепил имя класса в имя, чтобы нельзя было переопределить метод точно так же в потомкеПроверим
magic.__Magic__private()
'I am private AF'
Питон искажает имена всех переменных, которые начинаются с двойного подчеркивания. Вот такой вот хак.Задачка
Почему это работает?
Почему это работает?
_MagicUnderscore__secret = 'Эта дичь сработает?'
class MagicUnderscore:
def magic(self):
return __secret
print(MagicUnderscore().magic())
ВернетЭта дичь сработает?
Подумай, почему оно так работает?Сегодня решил поговорить про lambda functions в python.
Как мы знаем, в питоне все - объекты. Даже функции. А если объект может существовать без имени, то и функция может просто можно работать с функцией как с объектом.
Простой пример
Так и часто и используют, как аргументы функций. Простой пример:
Сначала все просто, as always.
Но у питона свои особенности, как всегда и их стоит учитывать.
Lambda функции в питоне живут в nonlocal пространстве и умеют запоминать свой контекст.
Пример
Важно не использовать lambda функции просто так.
Я видел код вида
lambda функция - анонимная функция(у которой нет имени)Как мы знаем, в питоне все - объекты. Даже функции. А если объект может существовать без имени, то и функция может просто можно работать с функцией как с объектом.
Простой пример
def hello(me, name):Ничто иное как
return f'Hello from {me}, {name}!'
hello = lambda me, name: f'Hello from {me}, {name}!'
В общем, ничего сложного - просто функции одного выражения. Кратко и удобно, можно сразу отправлять такую lambda, как аргумент в функцию.Так и часто и используют, как аргументы функций. Простой пример:
sorted(range(-5, 6), key=lambda x: x * x)Но все же чаще функции побольше, их удобнее читать в стандартном формате.
Сначала все просто, as always.
Но у питона свои особенности, как всегда и их стоит учитывать.
Lambda функции в питоне живут в nonlocal пространстве и умеют запоминать свой контекст.
Пример
def hello(me):Вернет
return lambda name: f'Hello from {me}, {name}!'
greeting = hello('Jack')
greeting('Kate')
'Hello from Jack, Kate!'То есть lambda помнит переменные своего подпространства (me), связана с ними и может их использовать.
Важно не использовать lambda функции просто так.
Я видел код вида
class Hello:Это может показаться короче, но читать и поддерживать такой код сильно сложнее, к сожалению.
greet = lambda self: print('Hello')
После простой теории надо давать убийственные примеры, а то скучно.
names = ['Jack', 'Michael', 'Kate', 'Jimmy', 'Python']
def greetings():
return [lambda me: f'Hello from {me}, {name}!' for name in names]
for greeting in greetings():
print(greeting('Creator'))
ВернетHello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Подумай, почему оно так работает?Если в python3
s = 'f(φ)==f(φ)'
тоs[1] is s[7], s[2] is s[8]
Вернетisinstance((), tuple)
isinstance((1), tuple)
isinstance((1,2), tuple)
isinstance((1), tuple)
isinstance((1,2), tuple)
Anonymous Poll
38%
True True True
0%
True True False
2%
True False False
25%
True False True
8%
False True True
2%
False True False
25%
False False True
2%
False False False
Что выведет запрос?❓
Вариант 1 - 2
👍👍👍 11%
Вариант 2 - 6
👍👍👍👍👍👍👍👍 32%
Вариант 3 - 4
👍👍👍👍👍👍 21%
Вариант 4 - 1
👍👍 5%
А где python? - 6
👍👍👍👍👍👍👍👍 32%
👥 19 человек уже проголосовало.
Вариант 1 - 2
👍👍👍 11%
Вариант 2 - 6
👍👍👍👍👍👍👍👍 32%
Вариант 3 - 4
👍👍👍👍👍👍 21%
Вариант 4 - 1
👍👍 5%
А где python? - 6
👍👍👍👍👍👍👍👍 32%
👥 19 человек уже проголосовало.