Proglib.academy | IT-курсы
3.74K subscribers
2.09K photos
71 videos
14 files
1.95K links
Онлайн-курсы для программистов от создателей «Библиотеки программиста».

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f60aed6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
✏️ Вопрос с реального собеседования по Python

Что такое модуль в Python? Как узнать имя модуля? Что такое модульное программирование?

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

Как узнать имя модуля:

Каждый модуль в Python имеет глобальную переменную __name__. Если модуль запущен как скрипт, то значение этой переменной будет __main__.

Что такое модульное программирование:

Модульное программирование — это подход к созданию программ из небольших независимых блоков (модулей). Это упрощает тестирование, поиск ошибок, а также улучшает переносимость программ.

#собес_academy
👍4🔥1
✏️ Вопрос с реального собеседования по Python

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

1️⃣ Список можно изменить после создания

2️⃣ Кортеж нельзя изменить после создания

3️⃣ Список упорядочен. Он представляет собой упорядоченные последовательности объектов, как правило, одного и того же типа. Например, все имена пользователей упорядочены по дате создания: [«Max», «Steph», «Daphna»]

4️⃣ У кортежа есть структура. В каждом индексе могут сосуществовать различные типы данных. Например, такая запись базы данных в памяти: (2, «Steph», «2024–09–24») # id, name, created_at.

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
✏️ Вопрос с реального собеседования по Python

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

Без импорта класса Template есть три способа интерполяции строк:

father = 'Boris'

# 1. f strings
print(f'Hello {father}')

# 2. % operator
print('Hey %s %s' % (father, father))

# 3. format
print(
"My father name is {}".format((father))
)

#собес_academy
👍1
✏️ Вопрос с реального собеседования по Python

В чем разница между «is» и «==»?

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

#собес_academy
👍5
✏️ Вопрос с реального собеседования по Python

Что такое функция range() и как её использовать

Функция range() создаёт последовательности целых чисел. Её можно применять в трёх вариантах:

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

1️⃣ range(stop): генерирует числа от 0 до значения stop (не включая его).

[x for x in range(10)]
# Результат: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


2️⃣ range(start, stop): генерирует числа от значения start до stop (также не включая stop).

[x for x in range(3, 10)]
# Результат: [3, 4, 5, 6, 7, 8, 9]


3️⃣ range(start, stop, step): создаёт последовательность от start до stop, с шагом, равным значению step.

[x for x in range(2, 10, 2)]
# Результат: [2, 4, 6, 8]


#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
✏️ Вопрос с реального собеседования по Python

Определите класс book с двумя атрибутами: название и автор. Затем создайте экземпляр и верните автора

Вот как это сделать:

class Book:
def __init__(self, название, автор):
self.название = название
self.автор = автор

# Создаем экземпляр класса
книга = Book('Мастер и Маргарита', 'Михаил Булгаков')

# Выводим автора
книга.автор
# => 'Михаил Булгаков


#собес_academy
👍8
✏️ Вопрос с реального собеседования по Python

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

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

Статические методы с декоратором @staticmethod не связаны с экземпляром класса и не могут изменять его атрибуты.

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

class TeaShop:
specialty = 'green tea'

def __init__(self, tea_price):
self.tea_price = tea_price

# instance method
def make_tea(self):
print(f'Making {self.specialty} for ${self.tea_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}')

tea_shop = TeaShop(5) // Метод экземпляра (make_tea) создаёт чай с текущими атрибутами экземпляра
tea_shop.make_tea()
# => Making green tea for $5


#собес_academy
👍3
✏️ Вопрос с реального собеседования по Python

В чём разница между func и func()?

func — это объект функции, а func() — это вызов функции.

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

func(): Это фактический вызов функции. Круглые скобки указывают Python на выполнение кода внутри функции и возврат её результата. Если бы функция принимала аргументы, они передавались бы в скобках — например, func(arg1, arg2).

Пример для наглядности:
def func():
print('I am a function')

# Присваиваем функцию переменной
new_func = func
new_func() # Вывод: I am a function

# Передаем функцию как аргумент другой функции
def call_func(f):
f() # Вызов переданной функции

call_func(func) # Вывод: I am a function

#собес_academy
👍5
✏️ Вопрос с реального собеседования по Python

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

map возвращает итератор, который применяет функцию к каждому элементу списка. Если нужно, его можно преобразовать в список:
def add_three(y):
return y + 3

li = [1, 2, 3]
list(map(add_three, li))
#=> [4, 5, 6]

В примере к каждому элементу списка добавляется 3.

#собес_academy
👍2
✏️ Вопрос с реального собеседования по Python

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

Функция reduce может сначала показаться сложной, но как только вы попробуете её несколько раз, всё встанет на свои места.

🌻 Что делает reduce?

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

from functools import reduce

# Определяем функцию сложения
def сложить_числа(первое, второе):
return первое + второе

# Исходный список
числа = [1, 2, 3, 5]

# Применяем reduce
итог = reduce(сложить_числа, числа)
print(итог) # => 11

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
1
✏️ Вопрос с реального собеседования по Python

Как работает функция filter

Функция filter выполняет задачу, полностью соответствующую своему названию: она отбирает элементы из последовательности, которые соответствуют заданному условию.

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

def is_even(number):
return number % 2 == 0

array = [1, 2, 3, 4, 5, 6, 7, 8]

filtered = [item for item in filter(is_even, array)]
print(filtered)
# Output: [2, 4, 6, 8]

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

#собес_academy
👍1
✏️ Вопрос с реального собеседования по Python

Переменные в Python передаются по ссылке или по значению?

В Python переменные передаются по ссылке, но есть нюанс: одни объекты хранятся как данные, другие — как указатели.

Например, строки неизменяемы: если изменить их внутри функции, создаётся новый объект, а старый остаётся неизменным. Делая x = 'text' и y = x, вы создаёте две ссылки на один объект. Но если изменить x, это уже будет новая сущность, а y останется прежним.

#собес_academy
🔥1
✏️ Вопрос с реального собеседования по Python

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

Метод reverse() переворачивает список, но не возвращает его. Он изменяет сам объект.

Пример:

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

Если нужно получить новый перевёрнутый список, используйте срез:
new_list = li[::-1]

#собес_academy
👍1
✏️ Вопрос с реального собеседования по Python

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

Допустим, у нас есть строка 'cat', и мы хотим умножить её на 3. Давайте посмотрим:

'cat' * 3
# => 'catcatcat'


Что произошло?

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

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍1
✏️ Вопрос с реального собеседования по Python

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

Когда в Python вы умножаете список на число, вы фактически дублируете его содержимое нужное количество раз. Давайте посмотрим, как это работает на примере:

my_list = [1, 2, 3]
result = my_list * 2
print(result)
# [1, 2, 3, 1, 2, 3]


Что произошло?

Список [1, 2, 3] скопировался дважды, и в результате получился новый список длиной 6 элементов.

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁2
✏️ Вопрос с реального собеседования по Python

Что такое self в Python

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

📌 Пример:
class Shirt:
def __init__(self, color):
self.color = color # Свойство привязывается к экземпляру

s = Shirt('yellow') # Создаём рубашку жёлтого цвета
print(s.color) # => 'yellow'


Что произошло

С
помощью self мы задаём и используем свойства экземпляра, такие как color. В данном случае, self.color — это свойство, доступное конкретной рубашке.

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1💯1
✏️ Вопрос с реального собеседования по Python

Как объединить списки

Для объединения списков достаточно сложить их с помощью оператора +.

list1 = [10, 20]
list2 = [30, 40, 50]

result = list1 + list2
print(result)
# Вывод: [10, 20, 30, 40, 50]


Но помните: этот способ работает только со списками. Если вы попробуете объединить массивы (например, из NumPy), ничего не выйдет. Для массивов нужно использовать методы библиотеки, такие как np.concatenate()

#собес_academy
👍3
✏️ Вопрос с реального собеседования по Python

Глубокая и мелкая копии: в чем разница

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

1️⃣ Мелкая копия

Создается новый объект, но элементы копируются по ссылке. Добавление новых элементов в оригинал не повлияет на копию, но изменения самих элементов — повлияют.
list3 = [['a'], ['b'], ['c']]
list4 = list(list3)

list3.append(['d'])
print(list4)
# Вывод: [['a'], ['b'], ['c']]

list3[0][0] = 'X'
print(list4)
# Вывод: [['X'], ['b'], ['c']]


2️⃣ Глубокая копия

Глубокая копия создает независимый объект, включая его содержимое. Изменения в оригинале никак не затронут копию.
list5 = [['a'], ['b'], ['c']]
list6 = copy.deepcopy(list5)

list5.append(['d'])
list5[0][0] = 'X'
print(list6)
# Вывод: [['a'], ['b'], ['c']]


#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
✏️ Вопрос с реального собеседования по Python

Списки или массивы в Python — в чем разница

Используйте списки для работы с разными типами и динамическими структурами, массивы — для численных вычислений и ML

Гибкость: в списках можно хранить разные типы данных, массивы (из NumPy) требуют однородных элементов.

Операции: арифметика в списках — это манипуляция элементами (например, конкатенация), а в массивах — математические вычисления, как в линейной алгебре.

Эффективность: массивы занимают меньше памяти и работают быстрее, особенно на больших объемах данных.

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
✏️ Вопрос с реального собеседования по Python

Как объединить два массива в NumPy

Частая ошибка — путать массивы и списки. NumPy — библиотека для работы с массивами, и здесь всё основано на линейной алгебре. Чтобы объединить два массива, используем специальную функцию:

import numpy as np

arr1 = np.array([10, 20, 30])
arr2 = np.array([40, 50, 60])

result = np.concatenate((arr1, arr2))
print(result)
#=> [10 20 30 40 50 60]


Самая база для новичков 👀

#собес_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2