Python: задачки и вопросы
Ir al canal en Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Mostrar más6 952
Suscriptores
-424 horas
-107 días
-6130 días
Archivo de publicaciones
Ниже приводится несколько правил в языке Python, которым вам необходимо следовать, если у вас появится потребность использовать специальные режимы сопоставления аргументов:
— В вызове функции аргументы должны указываться в следующем порядке: любые позиционные аргументы (значения), за которыми могут следовать
любые именованные аргументы (имя=значение) и аргументы в форме *итерируемый объект, за которыми могут следовать аргументы в форме **словарь.
— В заголовке функции аргументы должны указываться в следующем порядке: любые обычные аргументы (name), за которыми могут следовать аргументы со значениями по умолчанию (name=value), за которыми следуют аргументы в форме *name (или * в 3.0), если имеются, за которыми могут следовать любые имена или пары name=value аргументов, которые передаются только по имени (в 3.0), за которыми могут следовать аргументы в форме **имя.
def func(*имя) # *имя собирает любые добавочные не прошедшие сопоставление аргументы в кортеж, а **имя — в словарь.
В версии Python 3.0 и выше любые обычные аргументы или аргументы со значениями по умолчанию, следующие за формой *имя или за единственным символом *, являются именованными аргументами, которые при вызове функции должны передаваться только по имени.Чем отличается сопоставление аргументов функции func(*arg_obj) от func(**arg_obj)?
Инструкция return может возвращать объект любого типа, поэтому с ее помощью можно возвращать сразу несколько значений, упаковав их в кортеж или в коллекцию любого другого типа.
def multiple(x, y):
x = 2 # Изменяется только локальное имя
y = [3, 4]
return x, y # Новые значения возвращаются в виде кортежа
X = 1
L = [1, 2]
Z = multiple(X, L) # Результаты присваиваются именам в вызывающей программе
print(Z) # (2, [3, 4]) — это кортеж
Выглядит так, как будто функция возвращает два значения, но на самом деле – это единственный кортеж, состоящий из двух элементов, а необязательные окружающие скобки просто опущены. После возврата из функции можно использовать операцию присваивания кортежа, чтобы извлечь отдельные элементы. Переменные X и L изменятся после вызова функции, но только потому, что мы явно это предусмотрели.Вы когда-нибудь хотели стать лучшей версией себя?
Применять 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 отличается