*args i **qwargs

У функцію в Python можна передати змінну кількість аргументів двома способами:

Ми використовуємо *args і **kwargs як аргумент, коли завчасно невідомо, скільки значень ми захочемо передати функції.

Приклад функції, яка цікава тим, що один її параметр може приймати як рядок, так і список або словник

Приклад з *args:

def adder(*nums):
    sum = 0

    for n in nums:
        sum += n

    print("Sum: ", sum)

adder(3, 5)
adder(4, 5, 6, 7)
adder(1, 2, 3, 5, 6)
Sum: 8
Sum: 22
Sum: 17

Приклад з **kwargs:

def intro(**data):
    print("\nData type of argument: ",type(data))

    for key, value in data.items():
        print("{} is {}".format(key, value))

intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890)
intro(Firstname="John", Lastname="Wood", Email="johnwood@nomail.com", Country="Wakanda", Age=25, Phone=9876543210)

Ми отримаємо наступне:

Data type of argument: <class 'dict'>
Firstname is Sita
Lastname is Sharma
Age is 22
Phone is 1234567890

Data type of argument: <class 'dict'>
Firstname is John
Lastname is Wood
Email is johnwood@nomail.com
Country is Wakanda
Age is 25
Phone is 9876543210

Приклад функції, яка цікава…

… тим, що один її параметр може приймати як рядок, так і список або словник і в залежності від цього обробляє передані дані

# ---------------------------------------------------------------------
def log(level, mess, vals=None):

	if vals:
		if isinstance(vals, str):
			logger.log(level, mess.format(vals))    # рядок
		elif isinstance(vals, (tuple, list)):
			logger.log(level, mess.format(*vals))   # список/кортеж
		elif isinstance(vals, dict):
			logger.log(level, mess.format(**vals))  # словник
	else:
		logger.log(level, mess)