Loading lesson path
Concept visual
*args and kwargs By default, a function must be called with the correct number of arguments. However, sometimes you may not know how many arguments that will be passed into your function. *args and kwargs allow functions to accept a unknown number of arguments. Arbitrary Arguments - *args If you do not know how many arguments will be passed into your function, add a * before the parameter name. This way, the function will receive a tuple of arguments and can access the items accordingly:
Formula
Using *args to accept any number of arguments:def my_function(*kids ):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")*args in Python documentation.
Formula
What is *args?*args parameter allows a function to accept any number of positional arguments. Inside the function, args becomes a tuple containing all the passed arguments:
Formula
Accessing individual arguments from *args:def my_function(*args):
print("Type:", type(args))
print("First argument:", args[0])
print("Second argument:", args[1])
print("All arguments:", args)
my_function("Emil", "Tobias", "Linus")Formula
Using *args with Regular Arguments
You can combine regular parameters with *args.
Regular parameters must come before *args:def my_function(greeting, *names):for name in names:
print(greeting, name)
my_function("Hello", "Emil", "Tobias", "Linus")In this example, "Hello" is assigned to greeting, and the rest are collected in names.
Formula
Practical Example with *args*args is useful when you want to create flexible functions:
A function that calculates the sum of any number of values:
def my_function(*numbers):Formula
total = 0 for num in numbers:total += num return total print(my_function(1, 2, 3))
print(my_function(10, 20, 30, 40))
print(my_function(5))def my_function(*numbers):
if len(numbers) == 0:
return None max_num = numbers[0]for num in numbers: if num > max_num:
max_num = num return max_num print(my_function(3, 7, 2, 9, 1))Arbitrary Keyword Arguments - kwargs If you do not know how many keyword arguments will be passed into your function, add two asterisks before the parameter name. This way, the function will receive a dictionary of arguments and can access the items accordingly:
Using **kwargs to accept any number of keyword arguments:
def my_function(**kid ):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")kwargs in Python documentation. What is kwargs?
**kwargs parameter allows a function to accept any number of keyword arguments. Inside the function, kwargs becomes a dictionary containing all the keyword arguments:
Accessing values from **kwargs:
def my_function(**myvar):
print("Type:", type(myvar))
print("Name:", myvar["name"])
print("Age:", myvar["age"])
print("All data:", myvar)Formula
my_function(name = "Tobias", age = 30, city = "Bergen")Using kwargs with Regular Arguments You can combine regular parameters with kwargs. Regular parameters must come before **kwargs:
def my_function(username, **details):
print("Username:", username)
print("Additional details:")
for key, value in details.items():
print(" ", key + ":", value)Formula
my_function("emil123", age = 25, city = "Oslo", hobby = "coding")
Combining *args and **kwargs
You can use both *args and **kwargs in the same function.regular parameters *args **kwargs
def my_function(title, *args, **kwargs):
print("Title:", title)
print("Positional arguments:", args)
print("Keyword arguments:", kwargs)Formula
my_function("User Info", "Emil", "Tobias", age = 25, city = "Oslo")Formula
Using * to unpack a list into arguments:def my_function(a, b, c):
return a + b + c numbers = [1, 2, 3]Formula
result = my_function(*numbers) # Same as: my_function(1, 2, 3)print(result)Unpacking Dictionaries with If you have keyword arguments stored in a dictionary, you can use to unpack them:
Using ** to unpack a dictionary into keyword arguments:
def my_function(fname, lname):
print("Hello", fname, lname)
person = {"fname": "Emil", "lname": "Refsnes"}
my_function(**person) # Same as: my_function(fname="Emil", lname="Refsnes")