en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Python: задачки и вопросы

Python: задачки и вопросы

Open in Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

Show more
6 861
Subscribers
-224 hours
-137 days
-4730 days
Posts Archive
Вы когда-нибудь хотели стать лучшей версией себя? Применять SQLAlchemy эффективнее — быстрее, лучше, умнее! 23 декабря, 20:00
Вы когда-нибудь хотели стать лучшей версией себя?  Применять SQLAlchemy эффективнее — быстрее, лучше, умнее! 23 декабря, 20:00 мск — открытый урок для Python-разработчиков. Что делать, если методы, использующие SQLAlchemy и СУБД, тормозят? Когда оптимизация внутри SQLAlchemy — благо, а когда — беда? Как создать удобную панель администрирования поверх SQLAlchemy? Спикер Дмитрий Панкрашов — ведущий разработчик в компании-партнере вендора СЭД «Директум». Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/rbJm/ Все участники открытого урока получат скидку на «Python Developer. Professional» Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Что выведет код выше?
Anonymous voting

#ловушка
#ловушка

func(**словарь) передает все пары ключ / значение в словаре как отдельные ключевые аргументы. Неважно, в каком порядке в dct указаны элементы: функция распределит их поименно. Такой тип сопоставления аргументов называется «ключевое».
foo(first = 1, second = 'Текст') # как интерпретатор видит аргументы
Существует также позиционное сопоставление аргументов foo(arg1, arg2), где аргументы сопоставляются по их положению. Чтобы оно заработало со словарем dct, придется передать их так:
foo(dct['first'], dct['second'])

Что выведет код?
Anonymous voting

#ловушка
#ловушка

X = 1
a = X # Разделяют тот же самый объект в памяти
a = 2 # Переустанавливает только a, значением X по-прежнему будет 1
print(X)

Что выведет код?
Anonymous voting

#размяться
#размяться

Вот что означает отсутствие совмещения имен — присваивание имени аргумента внутри функции не изменяет волшебным образом переменную. Имена аргументов могут изначально разделять передаваемые объекты (по существу они являются указателями на эти объекты), но только временно, когда функция вызывается впервые. После повторения присваивания аргумента связь разрывается. Так происходит в случае присваивания самим именам аргументов. Когда аргументам передаются изменяемые объекты, подобные спискам и словарям, мы должны осознавать, что изменения на месте таких объектов могут продолжить свое существования после завершения функции, а потому оказывать воздействие на вызывающий код.
def changer(a, b): # Аргументам присваиваются ссылки на объекты
    a = 2 # Изменяет только значение локального имени
    b[0] = 'spam' # Изменяет разделяемый объект на месте
    

X = 1
L = [2, 3]

changer(X, L) # Передача изменяемого и неизменяемого объектов
print(X, L) # X остается прежним, L отличается

Что выведет код выше?
Anonymous voting

#размяться
#размяться

Выводится 'Spam', поскольку оператор nonlocal означает, что присваивание X внутри вложенной функции изменяет X в локальной области видимости объемлющей функции. Без этого оператора присваивания классифицировало X бы как локальную переменную во вложенной функции, делая ее другой переменной; тогда код выводил бы 'Ni'.

Что выведет код?
Anonymous voting

#размяться
#размяться

Выводится 'Ni' в одной строке, затем 'Spam' в другой, потому что print() во вложенной функции находит имя в локальной области видимости объемлющей функции, а отображение в конце находит переменную в глобальной области видимости.

Что выведет код?
Anonymous voting

#размяться
#размяться

Выведется 'Ni', поскольку объявление global заставляет переменную, присваиваемую внутри функции, ссылаться на переменную в объемлющей глобальной области видимости.

Что выведет код?
Anonymous voting