Telegram Web
У нас есть функция f с тремя параметрами:


def f(a, b = 1, c = 2):
...

И она вызывается дважды:

1. f(2, c = 2):
- a = 2 (первый позиционный аргумент)
- b = 1 (значение по умолчанию, так как не указано)
- c = 2 (именованный аргумент)
Поэтому выводится: a is: 2 b is: 1 c is: 2

2. f(c = 100, a = 110):
- a = 110 (именованный аргумент)
- b = 1 (значение по умолчанию, так как не указано)
- c = 100 (именованный аргумент)
Поэтому выводится: a is: 110 b is: 1 c is: 100

Python сначала обрабатывает позиционные аргументы, а затем именованные. Если какой-то параметр не указан, используется его значение по умолчанию. В нашем случае параметр b ни разу не был указан явно, поэтому всегда использовалось его значение по умолчанию - 1.
2
🔍 Что выведет код?
Anonymous Quiz
66%
300 400
18%
100 400
5%
100 200
11%
Error
👍9
1. В классе P (родительский класс):
- self.__x = 100 - создается приватный атрибут __x со значением 100
- self.y = 200 - создается публичный атрибут y со значением 200

2. В классе C (дочерний класс):
- super().__init__() - вызывается конструктор родительского класса
- self.__x = 300 - создается НОВЫЙ приватный атрибут __x со значением 300
- self.y = 400 - переопределяется значение публичного атрибута y

Ключевой момент здесь в том, что в Python приватные атрибуты (с двойным подчеркиванием __) автоматически «манглируются» (переименовываются) интерпретатором. Когда мы создаем приватный атрибут __x в классе P, он фактически становится _P__x, а когда создаем __x в классе C, он становится _C__x.

Поэтому:
1. Когда вызывается d.print(), метод print из класса P обращается к self.__x, что на самом деле означает self._P__x, поэтому выводится 100
2. Атрибут y является публичным, поэтому его значение успешно переопределяется в классе C на 400

Таким образом, в выводе мы видим:
- 100 (значение _P__x из родительского класса)
- 400 (значение y из дочернего класса)

Это демонстрирует важное различие между приватными и публичными атрибутами в Python при наследовании.
👍53
🔍 Что выведет код?
Anonymous Quiz
11%
1
6%
2
18%
3
65%
4
Код выводит "131211131211" и затем вызывает ошибку IndexError.

rev_func() — рекурсивная функция, но она не имеет условия выхода (базового случая):

1. Начальный вызов: rev_func(x, 3)
- x = [11, 12, 13]
- length = 3
- Выводит x[2] = 13

2. Рекурсивный вызов: rev_func(x, 2)
- Выводит x[1] = 12

3. Рекурсивный вызов: rev_func(x, 1)
- Выводит x[0] = 11

4. Рекурсивный вызов: rev_func(x, 0)
- Пытается вывести x[-1], что приводит к IndexError

Функция продолжает вызывать сама себя, уменьшая length, пока не достигает отрицательного значения, что приводит к попытке доступа к несуществующему индексу списка (т. е. IndexError).
👎9👍1
Выберите стандартный метод Python для записи данных в бинарном режиме:
Anonymous Quiz
55%
write
14%
Output.binary
16%
Dump
15%
Binary.output
👍2👎1
write - это стандартный метод для записи данных в файл. Он может работать с бинарными данными, если файл открыт в бинарном режиме ('wb').

Остальные варианты неверны:
- Output.binary - такого метода нет в стандартной библиотеке Python
- Dump - это не стандартный метод Python для записи данных
- Binary.output - такого метода нет в стандартной библиотеке Python

Пример правильного использования write для бинарной записи:

with open('file.bin', 'wb') as f:
f.write(binary_data)
👍1👎1
🌱 Что выведет код?
Anonymous Quiz
18%
[1, 2, 3]
74%
[1, 2, 3, 4]
5%
[4, 1, 2, 3]
3%
Error
👍2👎1
Списки являются изменяемыми объектами, и при присваивании b = a создается ссылка на тот же список, а не его копия. Поэтому при изменении списка b через метод append(), изменения также отражаются в списке a, так как они указывают на один и тот же объект в памяти.
👍3👎1
🔍 Что выведет код?
Anonymous Quiz
14%
a
74%
b
6%
ab
6%
Error
👍2👎1
Код выведет "b" из-за принципа работы областей видимости LEGB и использования ключевого слова global:

1. Сначала определяется глобальная переменная x со значением "a":
x = "a"

2. Затем определяется функция outer_func(), которая объявляет x как глобальную переменную с помощью ключевого слова global:

def outer_func():
global x

3. Внутри outer_func() определяется вложенная функция nested_func(), которая просто выводит значение x:

def nested_func():
print(x)

4. После определения функций, значение глобальной переменной x изменяется на "b":
x = "b"

Благодаря объявлению global x внутри outer_func(), все обращения к x внутри этой функции (включая вложенные функции) будут ссылаться на глобальную переменную x. Когда nested_func() вызывается и пытается вывести x, она ищет значение x в следующем порядке (LEGB):
— L (Local): локальной переменной x нет;
— E (Enclosing): из-за global x в outer_func, пропускается;
— G (Global): находит x со значением "b";
— B (Built-in): не требуется.
👍2👎1
Классы всегда вкладываются внутрь модуля. Классы и модули являются пространствами имен, но классы соответствуют операторам (не целым файлам) и поддерживают такие понятия ООП, как множество экземпляров, наследование и перегрузку операций (все перечисленное модули не поддерживают). До известной степени модуль подобен классу с единственным экземпляром без наследования, который соответствует полному файлу кода.
👍2👎1
2025/07/12 22:44:47
Back to Top
HTML Embed Code: