Правильно ли вы указываете аргументы функции Python?
Аргументы в Python могут быть указаны четырьмя различными способами.
Они могут быть указаны как:
- Позиционные аргументы
- Аргументы ключевых слов
- Произвольные списки аргументов
- Словари произвольных аргументов ключевых слов
Вот как их правильно использовать.
Позиционные аргументы
Позиционные аргументы — это, очевидно, аргументы, определяемые своей позицией.
Они обязательны и не имеют значений по умолчанию.
Указание аргументов в качестве позиционных аргументов является наиболее часто используемым и наиболее простым способом установки аргументов функции.
Лучше всего использовать их с простыми функциями, которые имеют четкий естественный порядок, как показано ниже:
def calculate_distance(start, end): distance = end - start return(distance)
Если вы затем вызовете эту функцию без включения позиционных аргументов, вы получите сообщение об ошибке.
Конечно, это потому, что вы потребовали два позиционных аргумента в своей функции, но не предоставили их при вызове.
Технически вы можете изменить порядок позиционных аргументов, используя имена аргументов. Технически вы могли бы написать это:
def calculate_distance(end = 10, start = 5: distance = end - start return(distance)
И это сработает. Но это многословно, бессмысленно и просто немного глупо. Итак, не делайте этого.
Аргументы ключевых слов
Когда у функции больше пары обязательных аргументов — лучше использовать аргументы с ключевыми словами. Аргументы ключевых слов также требуют значений по умолчанию, что может быть очень полезно. Вы можете использовать их для указания необязательных ключевых слов, как в примере ниже.
def calculate_distance(start, end, units = km): distance = end - start return(str(distance) + units)
Например, если мы все еще хотим рассчитать пройденное расстояние, мы также можем включить единицу измерения. Часто мы можем работать в километрах, но иногда работать в других единицах измерения. Поэтому мы можем указать «км» в качестве аргумента ключевого слова по умолчанию, который при необходимости можно заменить. Поэтому,
calculate_distance(5,10) #returns '5km' calculate_distance(5,10, units = "m") #returns '5m'
Мы можем, как и выше, просто указать аргументы по порядку. Мы также можем указать аргументы в другом порядке, если мы ссылаемся на них. Однако это плохая практика. Мы должны вызывать функцию так же, как мы ее указываем. Что в этом случае будет:
calculate_distance(5,10, units = "m")
Последнее замечание по поводу аргументов ключевого слова заключается в том, что удалить необязательный аргумент, который был добавлен, сложнее, чем добавить его в будущем. Поэтому используйте аргументы ключевых слов только тогда, когда считаете их необходимыми.
Произвольные списки аргументов
Вы можете добавить расширяемое количество позиционных аргументов с помощью конструкции *args. Внутри функции args будет кортежем всех оставшихся позиционных аргументов.
def example(name, birthday, *args): print(name) print(birthday) print(args) print(args[1]) return example("James", "september 4th", "something else", "another thing")
Поэтому, если вы определите и вызовете функцию выше с показанными аргументами, вы получите следующий вывод.
Как уже говорилось, «args» — это кортеж всех других необходимых позиционных аргументов. Вы можете извлечь из этого кортежа позиционную индексацию. Здесь мы указали два позиционных аргумента, поэтому args[1] равен второму элементу в кортеже из-за нулевой индексации Python.
Однако, если все аргументы, которые вы передаете, имеют одинаковую природу — лучше потренироваться и проще передать списком.
Словарь аргументов произвольного ключевого слова
Точно так же, как позиционные аргументы связаны с аргументами ключевого слова, *args имеет аналог в **kwargs. По сути, он делает то же самое, что и *args, но вместо позиционных аргументов они являются именованными аргументами. Поэтому, если мы запустим функцию ниже:
def testing_function_two(name, birthday, **kwargs): print(name) print(birthday) print(kwargs) print(kwargs['kwarg2']) return testing_function_two("James", "september 4th", kwarg1 = "something else", kwarg2 = "another thing")
Мы получаем вывод ниже:
Как видно, **kwargs — это словарь всех переданных именованных аргументов, которые не были перехвачены другими аргументами ключевого слова.
Подобно своему аналогу *args, его следует использовать экономно и только при необходимости.
Краткое содержание
Если можете, придерживайтесь позиционных и ключевых аргументов. Используйте аргументы ключевого слова, когда нет естественного порядка. *args и **kwargs — отличные инструменты, но используйте их экономно и только при необходимости.
Другие программисты больше всего оценят простоту, поэтому не используйте *args и **kwargs, когда они многословны.
Удачного спора.
Спасибо за чтение, и я надеюсь, что это поможет вам.
If I’ve inspired you to join medium I would be really grateful if you did it through this link — it will help to support me to write better content in the future.If you want to learn more about data science, become a certified data scientist, or land a job in data science, then checkout 365 data science through my affiliate link.
Вот еще кое-что, что я написал: