Python: задачки и вопросы
رفتن به کانال در Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
نمایش بیشتر6 861
مشترکین
-224 ساعت
-137 روز
-4730 روز
آرشیو پست ها
Вы когда-нибудь хотели стать лучшей версией себя?
Применять SQLAlchemy эффективнее — быстрее, лучше, умнее!
23 декабря, 20:00 мск — открытый урок для Python-разработчиков.
Что делать, если методы, использующие SQLAlchemy и СУБД, тормозят? Когда оптимизация внутри SQLAlchemy — благо, а когда — беда? Как создать удобную панель администрирования поверх SQLAlchemy?
Спикер Дмитрий Панкрашов — ведущий разработчик в компании-партнере вендора СЭД «Директум».
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/rbJm/
Все участники открытого урока получат скидку на «Python Developer. Professional»
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
func(**словарь) передает все пары ключ / значение в словаре как отдельные ключевые аргументы.
Неважно, в каком порядке в dct указаны элементы: функция распределит их поименно. Такой тип сопоставления аргументов называется «ключевое».
foo(first = 1, second = 'Текст') # как интерпретатор видит аргументы
Существует также позиционное сопоставление аргументов foo(arg1, arg2), где аргументы сопоставляются по их положению. Чтобы оно заработало со словарем dct, придется передать их так:
foo(dct['first'], dct['second'])X = 1
a = X # Разделяют тот же самый объект в памяти
a = 2 # Переустанавливает только a, значением X по-прежнему будет 1
print(X)Вот что означает отсутствие совмещения имен — присваивание имени аргумента внутри функции не изменяет волшебным образом переменную. Имена аргументов могут изначально разделять передаваемые объекты (по существу они являются указателями на эти объекты), но только временно, когда функция вызывается впервые. После повторения присваивания аргумента связь разрывается.
Так происходит в случае присваивания самим именам аргументов. Когда аргументам передаются изменяемые объекты, подобные спискам и словарям, мы должны осознавать, что изменения на месте таких объектов могут продолжить свое существования после завершения функции, а потому оказывать воздействие на вызывающий код.
def changer(a, b): # Аргументам присваиваются ссылки на объекты
a = 2 # Изменяет только значение локального имени
b[0] = 'spam' # Изменяет разделяемый объект на месте
X = 1
L = [2, 3]
changer(X, L) # Передача изменяемого и неизменяемого объектов
print(X, L) # X остается прежним, L отличаетсяВыводится '
Spam', поскольку оператор nonlocal означает, что присваивание X внутри вложенной функции изменяет X в локальной области видимости объемлющей функции. Без этого оператора присваивания классифицировало X бы как локальную переменную во вложенной функции, делая ее другой переменной; тогда код выводил бы 'Ni'.Выводится '
Ni' в одной строке, затем 'Spam' в другой, потому что print() во вложенной функции находит имя в локальной области видимости объемлющей функции, а отображение в конце находит переменную в глобальной области видимости.Выведется '
Ni', поскольку объявление global заставляет переменную, присваиваемую внутри функции, ссылаться на переменную в объемлющей глобальной области видимости.