Введение

Зачем нужны *args и **kwargs? В этой статье мы дадим простое объяснение *args и **kwargs в Python. Мы просто разберем эти понятия, чтобы помочь вам понять их значение и использование. К концу у вас будет четкое понимание того, как использовать *args и **kwargs в вашем коде.

🌍*args и **kwargs в Python

*Аргументы

Синтаксис *args используется для передачи переменного количества аргументов в функцию. Это позволяет вам передавать любое количество дополнительных аргументов, даже если вы не определили их в функции заранее.

Вы можете использовать *args, когда не уверены, сколько аргументов вам нужно передать, или когда вы хотите передать различное количество аргументов.

Пример

def multiply(*args):
    result = 1
    for num in args:
        result *= num
    return result

#first time i gabe it 2 args
print(multiply(2, 3))          # Output: 6
#sec time: i gave it 3 args
print(multiply(4, 5, 6))       # Output: 120
#third time: i gave it 4
print(multiply(2, 3, 4, 5))    # Output: 120

Пример ✌️

def myFun(*argv):
    for arg in argv:
        print(arg)
 
 
myFun('Hello', 'Welcome', 'to', 'My', 'Medium')

Вывод

  • Что 🤔если я приведу меньше аргументов, то тоже сработает

  • Вы можете подумать об этом, гибкий контейнер может содержать любое количество аргументов.

Пример✌️☝️

def myFun(arg1, *argv):
    print("First argument :", arg1)
    for arg in argv:
        print("Next argument through *argv :", arg)
 
 
myFun('Hello', 'More', 'then', 'Welcome')

Выход

🌍**кваргс

синтаксис используется для передачи переменного количества аргументов ключевого слова в функцию. Это позволяет вам предоставлять именованные аргументы вместе с их значениями при вызове функции.

Вы можете думать об этом как о словаре, вы можете указать любое количество ключей: значений.

Пример☝️

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(key + ": " + value)

print_info(name="Alice", age="25")
# Output:
# name: Alice
# age: 25

print_info(city="London", country="UK")
# Output:
# city: London
# country: UK

Выход

Пример✌️

def create_person(**kwargs):
    person = {}
    for key, value in kwargs.items():
        person[key] = value
    return person

person1 = create_person(name="Alice", age=25, city="London")
print(person1)
# Output: {'name': 'Alice', 'age': 25, 'city': 'London'}

person2 = create_person(name="Bob", occupation="Engineer", country="USA")
print(person2)
# Output: {'name': 'Bob', 'occupation': 'Engineer', 'country': 'USA'}

Вывод

🌍Полный пример

def process_data(*args, **kwargs):
    for arg in args:
        print("Argument:", arg)
    
    for key, value in kwargs.items():
        print("Keyword argument -", key + ":", value)

process_data(1, 2, 3, name="Alice", age=25, city="London")

Выход

Пример✌️

# defining car class
class car():
    # args receives unlimited no. of arguments as an array
    def __init__(self, *args):
        # access args index like array does
        self.speed = args[0]
        self.color = args[1]
 
 
# creating objects of car class
Ford = car(500, 'red')
bmw = car(350, 'black')
mb = car(790, 'Blue')
 
# printing the color and speed of the cars
print(mb.color)
print(bmw.speed)

Выход

Примечание. args и kwargs — это просто имена переменных, обычно используемые для *args и **kwargs соответственно. Однако вы можете выбрать любые допустимые имена переменных, которые вы предпочитаете, используя *args и **kwargs. Важно использовать символы * и **, чтобы указать, что вы используете специальный синтаксис для аргументов переменной длины.

  • * собирает аргументы, не являющиеся ключевыми словами, в кортеж или распаковывает итерируемый объект в отдельные аргументы.
  • ** собирает аргументы ключевого слова в словарь или распаковывает словарь в отдельные аргументы ключевого слова.

Эти символы обеспечивают гибкость при работе с аргументами переменной длины и позволяют передавать в функции различное количество аргументов.

Не стесняйтесь подключать 🌹me на:

Твиттер: https://twitter.com/Noransaber11

Linkedin: https://www.linkedin.com/in/noran-saber-abdelfattah-6198471ba/

Github: https://github.com/Noransaber

С уважением, Норан🌹