Как сделать необязательный параметр в функции в python
В языке Python аргументы функции могут иметь значения по умолчанию, оно будет использовано, если при вызове функции значение этого аргумента не указано. Более того, аргументы имеющие значение по умолчанию при вызове могут быть указаны в произвольном порядке, если указано имя аргумента. В хранимых процедурах для SQL сервера Transact/SQL также могут быть использованы именованные аргументы; если вы пишите сценарии для SQL сервера, можете лишь бегло ознакомиться с этим разделом.
Пример 2.4. help — функция с двумя необязательными аргументами
def help(object, spacing=10, collapse=1):
Аргументы spacing и collapse могут быть опущены при вызове, так как для них определены значения по умолчанию. Аргумент object не имеет значения по умолчанию, поэтому должен быть указан всегда. Если функция help вызывается только с одним аргументом, то spacing принимает значение 10 и collapse принимает значение 1. Если help вызывается с двумя аргументами, collapse также принимает значение 1. Представьте теперь, что вы хотите указать значение аргумента collapse, но использовать значение по умолчанию для spacing. В большинстве языков вам придется передавать все три аргумента. Однако Python позволяет передавать аргументы в произвольном порядке по имени.
Пример 2.5. Возможные способы вызова help
help(odbchelper) help(odbchelper, 12) help(odbchelper, collapse=0) help(spacing=15, object=odbchelper)
| С одним аргументом, spacing и collapse получают значения по умолчанию, 10 и 1 соответственно. | |
| С двумя аргументами, collapse получает значение по умолчанию 1. | |
| Здесь вы явно указываете имя аргумента, collapse, для которого передается значение. Аргумент spacing по-прежнему получает значение по умолчанию 10. | |
| Даже обязательные аргументы (в данном случае — object), которые не имеют значения по умолчанию, могут быть переданы по имени, и именованные аргументы могут быть указаны в произвольном порядке. |
Это выглядит странным, пока вы не увидите, что список значений аргументов фактически является словарем. “Обычный” же способ передачи аргументов без указания их имен является сокращенной записью: интерпретатор сопоставляет значения аргументов их именам в соответствии с порядком, в котором они были указаны в определении функции. В большинстве случаев вы вызываете функции “обычным” способов, но при необходимости всегда можете воспользоваться дополнительной возможностью.
| Все что Вам нужно сделать для вызова функции — это указать значение для каждого обязательного аргумента. Способ передачи аргументов и порядок их следования — дело Вашего вкуса. | |
- Python Tutorial описывает, когда и как вычисляются значения аргументов по умолчанию. Это важно в случаях, когда значение по умолчанию является списком, словарем или другим изменяемым объектом.
Copyright © 2000, 2001, 2002 Марк Пилгрим
Copyright © 2001, 2002 Перевод, Денис Откидач
Как сделать необязательный параметр в функции в python


Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Необязательные параметры функции Python
Как сделать, чтоб при указании необязательного параметра при вызове функции другой необязательный параметр тоже надо было указать?
def some_func(name, title_id, search_by_id = True, serch_option: str = ''): pass
Если search_by_id == False необходимо будет использовать search_option , а title_id сделать необязательным параметром.
Отслеживать
задан 2 июл 2019 в 9:14
Александр Боканов Александр Боканов
323 4 4 серебряных знака 16 16 бронзовых знаков
Приведите примеры, как вы хотите вызывать функцию в обоих случаях.
2 июл 2019 в 9:23
1 — some_func(‘name’, ‘cost’) 2 — some_func(‘name’, False, ‘class’) как-то так
2 июл 2019 в 9:31
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
def some_func(name, title_id=None, search_by_id=True, serch_option=None): if (not search_by_id) and (serch_option is None): raise ValueError('Неправильный набор аргументов') .
Отслеживать
ответ дан 2 июл 2019 в 9:25
Sergey Gornostaev Sergey Gornostaev
66.4k 6 6 золотых знаков 51 51 серебряный знак 112 112 бронзовых знаков
- python
- python-3.x
- функции
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Python: Необязательные параметры функций
В программировании у многих функций и методов есть параметры, которые редко меняются. В таких случаях этим параметрам задают значения по умолчанию, которые можно поменять по необходимости. С помощью этого сокращается количество одинакового кода. Рассмотрим, как это выглядит на практике.
# Функция возведения в степень # Второй параметр имеет значение по умолчанию два def pow(x, base=2): return x ** base # Три во второй степени (двойка задана по умолчанию) pow(3) # 3 * 3 = 9 # Три в третьей степени pow(3, 3) # 3 * 3 * 3 = 27
Значение по умолчанию выглядит как обычное присваивание в определении. Оно срабатывает только в том случае, если параметр не передали.
Представьте, что вы не привезли с собой в автосервис запчасти для вашего автомобиля. Тогда автомеханик предложит вам поставить те, которые есть у него — по умолчанию.
Значение по умолчанию может быть даже в том случае, когда параметр один:
def my_print(text='nothing'): print(text) my_print() # => "nothing" my_print("Hexlet") # => "Hexlet"
Параметров со значениями по умолчанию может быть любое количество:
def f(a=5, b=10, c=100):
У значений по умолчанию есть одно ограничение. Они должны идти в самом конце списка параметров. С точки зрения синтаксиса, невозможно создать функцию, у которой после необязательного параметра идет обязательный:
# Такой код завершится с ошибкой def f(a=5, b=10, c=100, x): # И такой def f(a=5, b=10, x, c=100): # Этот код сработает def f(x, a=5, b=10, c=100): # Этот тоже сработает def f(x, y, a=5, b=10, c=100):
Теперь вы умеете работать со значениями параметров по умолчанию. Они могут быть как у нескольких параметров, так и у одного. И помните, что значения по умолчанию должны быть в самом конце списка параметров. Эти знания помогут сократить количество одинакового кода.
Задание
Реализуйте функцию get_hidden_card() , который принимает на вход номер кредитки (состоящий из 16 цифр) в виде строки и возвращает его скрытую версию, которая может использоваться на сайте для отображения. Если исходная карта имела номер 2034399002125581, то скрытая версия выглядит так ****5581. Другими словами, функция заменяет первые 12 символов, на звездочки. Количество звездочек регулируется вторым, необязательным, параметром. Значение по умолчанию — 4.
# Кредитка передается внутрь как строка # Второй параметр не передается, значит звездочек будет 4 get_hidden_card('1234567812345678') # ****5678 get_hidden_card('1234567812345678', 2) # **5678 get_hidden_card('1234567812345678', 3) # ***5678 # Или используя переменные card_number = '2034399002121100' get_hidden_card(card_number) # ****1100 get_hidden_card(card_number, 1) # *1100
Для выполнения задания вам понадобится механизм повторения строк, который повторяет строку указанное количество раз. Для этого достаточно умножить строку на число повторений:
'+' * 5 # +++++ 'o' * 3 # ooo
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Параметр по умолчанию — необязательный параметр функции
