Вопросы и задачи для собеседований на какой грейд вам хотелось бы видеть чаще?
Anonymous Poll
59%
junior
48%
middle
17%
senior
Что делает функция sample?
Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.
Это удобно при необходимости получить случайную выборку из данных.
Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.
Дополнительные аргументы:
counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).
В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.
Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.
Это удобно при необходимости получить случайную выборку из данных.
Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.
Дополнительные аргументы:
counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).
В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.
Напишите функцию на Python, которая принимает на вход список чисел и возвращает наибольшую возрастающую подпоследовательность (непоследовательные числа, идущие в порядке возрастания) из исходного списка
Для решения этой задачи используется динамическое программирование. Мы создаем массив dp, где dp[i] представляет собой длину наибольшей возрастающей подпоследовательности, заканчивающейся в nums[i]. Затем мы выполняем двойной цикл, чтобы найти наибольшую длину для каждого элемента. После этого мы определяем саму подпоследовательность, начиная с наибольшей длины и двигаясь обратно по массиву dp.
Пример использования:
python
nums = [3, 12, 5, 8, 10, 2, 1]
result = longest_increasing_subsequence(nums)
print(result) # Output: [3, 5, 8, 10]
Эта функция найдет наибольшую возрастающую подпоследовательность из списка [3, 12, 5, 8, 10, 2, 1], которой будет [3, 5, 8, 10], и выведет ее в консоль.
Для решения этой задачи используется динамическое программирование. Мы создаем массив dp, где dp[i] представляет собой длину наибольшей возрастающей подпоследовательности, заканчивающейся в nums[i]. Затем мы выполняем двойной цикл, чтобы найти наибольшую длину для каждого элемента. После этого мы определяем саму подпоследовательность, начиная с наибольшей длины и двигаясь обратно по массиву dp.
Пример использования:
python
nums = [3, 12, 5, 8, 10, 2, 1]
result = longest_increasing_subsequence(nums)
print(result) # Output: [3, 5, 8, 10]
Эта функция найдет наибольшую возрастающую подпоследовательность из списка [3, 12, 5, 8, 10, 2, 1], которой будет [3, 5, 8, 10], и выведет ее в консоль.
Напишите однострочник, который будет подсчитывать количество заглавных букв в файле
В этом однострочнике мы открываем файл ‘filename.txt’ и пробегаемся по всем его строкам и символам в каждой строке.
Для каждого символа, который является заглавной буквой метод isupper() возвращает True, и мы добавляем 1 к счетчику с помощью функции sum(). В конце, num_uppercase будет содержать количество заглавных букв в файле.
В этом однострочнике мы открываем файл ‘filename.txt’ и пробегаемся по всем его строкам и символам в каждой строке.
Для каждого символа, который является заглавной буквой метод isupper() возвращает True, и мы добавляем 1 к счетчику с помощью функции sum(). В конце, num_uppercase будет содержать количество заглавных букв в файле.
Можно ли объявлять функцию внутри другой функции? Где она будет видна?
Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.
Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.
Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.
Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.
Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.
Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.
Что такое и чем отличается old-style от new-style classes?
— Old-style классы наследуются непосредственно от объекта класса type. New-style классы наследуются от объекта класса object.
— New-style классы поддерживают дополнительные возможности, например descriptors, properties, slots. В old-style классах они не работают.
— В new-style классах метод init вызывается при наследовании, в отличие от old-style классов.
— New-style классы предпочтительны, так как полностью поддерживают особенности ООП. Большинство библиотек требуют именно их.
Рекомендуется использовать new-style классы, унаследованные от object. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.
— Old-style классы наследуются непосредственно от объекта класса type. New-style классы наследуются от объекта класса object.
— New-style классы поддерживают дополнительные возможности, например descriptors, properties, slots. В old-style классах они не работают.
— В new-style классах метод init вызывается при наследовании, в отличие от old-style классов.
— New-style классы предпочтительны, так как полностью поддерживают особенности ООП. Большинство библиотек требуют именно их.
Рекомендуется использовать new-style классы, унаследованные от object. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.
Почему не стоит использовать изменяемые объекты как параметры по-умолчанию?
В Python не рекомендуется использовать изменяемые объекты в качестве значений параметров по умолчанию по следующим причинам:
— Значения по умолчанию вычисляются один раз при определении функции, а не при каждом вызове.
— Если использовать изменяемый объект (список, словарь), то изменения в нем будут сохраняться между вызовами функции. Это может привести к неочевидному поведению и трудноуловимым ошибкам при многократном вызове функции.
В качестве альтернативы можно задавать значение по умолчанию как None, а в теле функции создавать новый изменяемый объект, если значение не передано.
Такой подход позволяет избежать «эффекта переноса» состояния между вызовами и делает код более понятным и предсказуемым.
В Python не рекомендуется использовать изменяемые объекты в качестве значений параметров по умолчанию по следующим причинам:
— Значения по умолчанию вычисляются один раз при определении функции, а не при каждом вызове.
— Если использовать изменяемый объект (список, словарь), то изменения в нем будут сохраняться между вызовами функции. Это может привести к неочевидному поведению и трудноуловимым ошибкам при многократном вызове функции.
В качестве альтернативы можно задавать значение по умолчанию как None, а в теле функции создавать новый изменяемый объект, если значение не передано.
Такой подход позволяет избежать «эффекта переноса» состояния между вызовами и делает код более понятным и предсказуемым.
Что такое замыкание?
Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.
Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.
Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).
В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.
Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.
Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).
В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
В чем отличие @foobar от @foobar()?
@foobar и @foobar() — это разные способы применения декораторов.
@foobar применяет декоратор без аргументов, а @foobar() применяет декоратор с аргументами.
То есть @foobar() вызывает декоратор foobar, передавая ему аргументы, а затем результат (декорированная функция) применяется к функции.
@foobar и @foobar() — это разные способы применения декораторов.
@foobar применяет декоратор без аргументов, а @foobar() применяет декоратор с аргументами.
То есть @foobar() вызывает декоратор foobar, передавая ему аргументы, а затем результат (декорированная функция) применяется к функции.
Узнаем, сколько всего определенных букв в строке
Один из способов узнать количество определенных букв в строке максимально быстрым методом — использовать метод count для строки. Этот метод принимает символ или подстроку и возвращает количество их вхождений в строку.
Этот метод является достаточно быстрым, так как использует внутренние оптимизации CPython, которые работают на низком уровне. Он также не требует дополнительной памяти, за исключением простой переменной, используемой для хранения результата.
Один из способов узнать количество определенных букв в строке максимально быстрым методом — использовать метод count для строки. Этот метод принимает символ или подстроку и возвращает количество их вхождений в строку.
Этот метод является достаточно быстрым, так как использует внутренние оптимизации CPython, которые работают на низком уровне. Он также не требует дополнительной памяти, за исключением простой переменной, используемой для хранения результата.
Что такое каррирование?
Каррирование — это техника преобразования функции с несколькими аргументами в цепочку функций, каждая из которых принимает только один аргумент.
Это позволяет зафиксировать некоторые аргументы функции и создать новую функцию с меньшим количеством аргументов.
Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Каррирование — это техника преобразования функции с несколькими аргументами в цепочку функций, каждая из которых принимает только один аргумент.
Это позволяет зафиксировать некоторые аргументы функции и создать новую функцию с меньшим количеством аргументов.
Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Напишите функцию, которая будет принимать список nums, содержащий числа в диапазоне от 1 до 100, и возвращать отсортированный список чисел, которые в списке nums встречались дважды.
Примеры:
duplicate_nums([1, 2, 3, 4, 3, 5, 6])
➞ [3]
duplicate_nums([81, 72, 43, 72, 81, 99, 99, 100, 12, 54])
➞ [72, 81, 99]
duplicate_nums([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
➞ None
Примечания:
— никакое число не будет встречаться в nums трижды и более раз,
— если никакое число в nums не встречалось дважды, функция должна вернуть None.
Примеры:
duplicate_nums([1, 2, 3, 4, 3, 5, 6])
➞ [3]
duplicate_nums([81, 72, 43, 72, 81, 99, 99, 100, 12, 54])
➞ [72, 81, 99]
duplicate_nums([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
➞ None
Примечания:
— никакое число не будет встречаться в nums трижды и более раз,
— если никакое число в nums не встречалось дважды, функция должна вернуть None.
Что такое dict comprehension?
Dict comprehension — это способ конструирования словарей в одну строку, аналогичный list comprehension.
Синтаксис dict comprehension: {ключ: значение for элемент in итерируемый_объект if условие}
Основные преимущества dict comprehension:
— Краткость и читабельность по сравнению с обычным циклом.
— Более высокая производительность за счет оптимизации.
— Удобство создания словарей «на лету» по данным.
Dict comprehension используется для:
— Преобразования данных из одного вида в другой.
— Создания словарей на основе списков или других итерируемых объектов.
— Фильтрации и обработки данных в процессе создания словаря.
Dict comprehension — это способ конструирования словарей в одну строку, аналогичный list comprehension.
Синтаксис dict comprehension: {ключ: значение for элемент in итерируемый_объект if условие}
Основные преимущества dict comprehension:
— Краткость и читабельность по сравнению с обычным циклом.
— Более высокая производительность за счет оптимизации.
— Удобство создания словарей «на лету» по данным.
Dict comprehension используется для:
— Преобразования данных из одного вида в другой.
— Создания словарей на основе списков или других итерируемых объектов.
— Фильтрации и обработки данных в процессе создания словаря.
🐍 У нас есть еженедельная email-рассылка, посвященная последним открытиям и тенденциям в мире Python.
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
Что такое PySimpleGUI?
PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.
PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.
PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
Извлекаем имя из адреса электронной почты
Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.
Это регулярное выражение начинает поиск с начала строки с помощью символа «^» и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ «@» и останавливается.
Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.
Это регулярное выражение начинает поиск с начала строки с помощью символа «^» и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ «@» и останавливается.
Как решить проблему конфликта зависимостей?
Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Что значит конструкция pass?
В Python, pass является пустым оператором. Он используется там, где синтаксически требуется оператор, но никаких действий выполнять не нужно. Например, это может быть полезно при написании заглушки функции, которая будет реализована позже, или в цикле, который ничего не должен делать на данной итерации.
В Python, pass является пустым оператором. Он используется там, где синтаксически требуется оператор, но никаких действий выполнять не нужно. Например, это может быть полезно при написании заглушки функции, которая будет реализована позже, или в цикле, который ничего не должен делать на данной итерации.