Списки являются изменяемыми объектами, и при присваивании b = a создается ссылка на тот же список, а не его копия. Поэтому при изменении списка b через метод append(), изменения также отражаются в списке a, так как они указывают на один и тот же объект в памяти.
write - это стандартный метод для записи данных в файл. Он может работать с бинарными данными, если файл открыт в бинарном режиме ('wb').
Остальные варианты неверны: - Output.binary - такого метода нет в стандартной библиотеке Python - Dump - это не стандартный метод Python для записи данных - Binary.output - такого метода нет в стандартной библиотеке Python
Пример правильного использования write для бинарной записи:
with open('file.bin', 'wb') as f: f.write(binary_data)
4. Рекурсивный вызов: rev_func(x, 0) - Пытается вывести x[-1], что приводит к IndexError
Функция продолжает вызывать сама себя, уменьшая length, пока не достигает отрицательного значения, что приводит к попытке доступа к несуществующему индексу списка (т. е. IndexError).
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 при наследовании.
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.
Когда встречается np.nan (Not a Number), pandas пропускает его при подсчёте. Все числа преобразуются в тип float64, потому что np.nan является числом с плавающей точкой
Если бы мы хотели, чтобы np.nan не прерывал подсчёт, мы могли бы использовать параметр skipna=False:
print(numbers.cumsum(skipna=False))
Тогда результат был бы другим, и все значения после np.nan тоже стали бы NaN.