*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

Подробности здесь

Если вам интересна тема вызова скриптов с аргументами из командной строки - рекомендую:

Статьи о Python
Программирование на Python
Интерактивный режим
Списки
Циклы
Методы
Функции
enum
Опеределить тип переменной Python
Тестирование с помощью Python
Работа с REST API на Python
Работа с файлами в Python
Скачать файл по сети
SQLite3: работа с БД
datetime: Дата и время в Python
Selenium + Python
Сложности при работе с Python
DJANGO
Flask
Скрипт для ZPL принтера
socket :Python Sockets
Виртуальное окружение
subprocess: выполнение bash команд из Python
multiprocessing: несколько процессов одновременно
psutil: cистемные ресурсы
sys.argv: аргументы командной строки
pydantic: валидация данных
paramiko: SSH из Python
enumerate

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: