Пришло время подводить итоги прошлых задачек для разминки по Python. Ниже разбор правильных ответов⚠️
1.
print(magic_func(25)) # [50]
print(magic_func(30)) # [50, 55]Причина в том, что аргумент
lst=[] - изменяемый объект. Он сохраняется между вызовами функции. Поэтому при втором вызове к списку добавляется второй элемент.2.
print(extend_list(1)) # [1]
print(extend_list(2)) # [1, 2]
print(extend_list(3, [])) # [3]
print(extend_list(4)) # [1, 2, 4]Демонстрация того же эффекта, что и в прошлом задании: используем изменяемый аргумент по умолчанию - список
lst. Он сохраняет своё состояние между вызовами, если не передать другой. В третьем вызове передан новый список, поэтому результат уже не связан с предыдущими:)3.
d = {1: 1, 1.0: 1.0, '1': '1', True: True}
print(d) # {1: True, '1': '1'}Ключи
1, 1.0 и True считаются равными в словаре, потому что 1 == 1.0 == True (можете проверить это отдельно). Поэтому остаётся последний по порядку ключ из этой группы (True), и он перезаписывает предыдущие.4.
print(tricky_or([], 'fallback')) # 'fallback'
print(tricky_or({}, 0)) # 0
print(tricky_or('', None)) # NoneОператор
or возвращает первое "истинное" значение или последнее, если все ложные. [], {}, '' считаются ложными, 'fallback' - истинное, 0 и None - тоже ложные, но 0 возвращается, потому что он второй аргумент. По аналогии можете подумать, как ведет себя в подобных ситуациях and.5.
print(x == y) # True
print(x is y) # False== сравнивает значения, по этому принципу списки равны. is сравнивает идентичность объектов - а у нас два разных списка в памяти, находящихся по разным адресам.6.
a = 256
b = 256
print(a is b) # True
a = 257
b = 257
print(a is b) # FalseЧисла от -5 до 256 кэшируются в Python, и переменные с такими значениями могут ссылаться на один и тот же объект. Значения вне этого диапазона не кэшируются, поэтому
a is b даёт False.Кто верно догадался во всех задачах - ставьте 😇
Успехов в диалогах с питоном!🐍
#python@data_easy





