*args **kwargs Python
Введение | |
*args | |
**kwargs | |
*args, **kwargs |
Введение
В Python можно создавать функции, которые принимают заранее неизвестное число аргументов.
Это очень удобно, к тому же есть два варианта: обычный - через *args
и через ключевые слова - **kwargs.
Начнём с *args
*args
Рассморим скрипт args_demo.py
def myfunc(*args):
print(args)
myfunc(50,70,120,3,14)
myfunc('a','a','a')
python args_demo.py
(50,70,120,3,14)
('a', 'b','c')
Как видно из примера: одна и та же функция смогла обработать сперва пять аргументов типа int а затем три аргумента типа str
Ничто не мешает перебрать полученные аргументы по одному.
Воспользуемся циклом for
def myfunc(*args):
for item in args:
print(item)
myfunc(50,70,120,3,14)
myfunc('a','a','a')
python args_demo.py
50
70
120
3
14
a
b
c
**kwargs
Использование **kwagrs позволяет передавать в функцию не простые аргументы, а аргументы
в виде ключевых слов.
Это очень удобно, если вам нужно работать с разными пользовательскими сценариями - не нужно
вводить какой-то определённый порядок аргументов, как в
Bash скриптах
Каждый аргумент получает своё название и может быть обработан в не зависимости от порядка.
Рассморим скрипт
kwargs_demo.py
def myfunc(**kwargs):
if 'website' in kwargs:
print('Заходите на сайт {}'.format(kwargs['website']))
else:
print('Посетите topbicycle.ru')
myfunc(website='HeiHei.ru')
myfunc(localsite='aredel.com')
myfunc(website='urn.su', author='Andrey Olegovich')
python kwargs_demo.py
Заходите на сайт HeiHei.ru
Посетите topbicycle.ru
Заходите на сайт urn.su
Функция ожидает аргумент с ключом website
При первом вызове такой аргумент приходит один
Во втором вызове не приходит ключа website и срабатывает else
Во время третьего вызова приходи website и author, но author функция не ждёт и он просто
игнорируется
Добавим ещё один вызов функции
myfunc(website='urn.su', author='Andrey Olegovich', 2)
python kwargs_demo.py
File "args_demo.py", line 29 myfunc3(website='urn.su', author='Andrey Olegovich', 2) SyntaxError: non-keyword arg after keyword arg
Как видите, принимать обычный аргумент функция не хочет. Чтобы узнать как решается эта задача - переходите к следующей главе.
*args **kwargs
Чтобы вызывать функции как с обычными аргументами так и с аргументами - ключевыми словами
нужно в объявлении функции указать и *args и **kwargs, а при вызове функции сперва
перечислить все обычные аргументы а затем ключевики
Рассморим скрипт
args_kwargs_demo.py
def myfunc(*args,**kwargs):
if 'website' in kwargs:
print('Заходите на сайт {}'.format(kwargs['website']))
else:
print('Посетите topbicycle.ru')
myfunc(2, website='urn.su', author='Andrey Olegovich')
python args_kwargs_demo.py
Заходите на сайт urn.su
Если вы получили ошибку
File "args_demo.py", line 21 SyntaxError: Non-ASCII character '\xd0' in file args_demo.py on line 21, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Добавьте следующий код на первую строку
# coding=utf-8
Подробности здесь
Если вам интересна тема вызова скриптов с аргументами из командной строки - рекомендую:
- Поиск по сайту
- aofeed - Telegram канал чтобы следить за выходом новых статей
- aofeedchat - задать вопрос в Телеграм-группе
Рекомендую наш хостинг beget.ru |
Пишите на info@urn.su если Вы: |
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык. |
2. Хотите разместить на сайте рекламу, подходящуюю по тематике. |
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте |
4. Нашли на сайте ошибку, неточности, баг и т.д. ... ....... |
5. Статьи можно расшарить в соцсетях, нажав на иконку сети:
|