bugl
bugl
HomeLearnPatternsPathsSearchPremium
HomeLearnPatternsPaths
Learn/Python/Foundations
Python•Foundations

Python *args and **kwargs

*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:

Example

def my_function(
*kids
):
  print("The youngest child is " + kids[2])

  my_function("Emil", "Tobias", "Linus")

Arbitrary Arguments are often shortened to *args in Python documentation.

What is *args?

The *args parameter allows a function to accept any number of positional arguments.

Inside the function, args becomes a tuple containing all the passed arguments:

Example

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")

Using *args with Regular Arguments

You can combine regular parameters with *args.

Regular parameters must come before *args:

Example

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 .

Practical Example with *args

*args is useful when you want to create flexible functions:

Example

def my_function(*numbers):
  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))

Example

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:

Example

def my_function(
**kid
):
  print("His last name is " + kid["lname"])

  my_function(fname = "Tobias", lname = "Refsnes")

Arbitrary Keyword Arguments are often shortened to **kwargs in Python documentation.

What is **kwargs?

The **kwargs parameter allows a function to accept any number of keyword arguments.

Inside the function, kwargs becomes a dictionary containing all the keyword arguments:

Example

def my_function(**myvar):
  print("Type:", type(myvar))
  print("Name:", myvar["name"])
  print("Age:", myvar["age"])
  print("All data:", myvar)

  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:

Example

def my_function(username, **details):
  print("Username:", username)
  print("Additional details:")
  for key, value in details.items():
    print(" ", key + ":", value)

    my_function("emil123", age = 25, city = "Oslo", hobby = "coding")

Combining *args and **kwargs

You can use both *args and **kwargs in the same function.

The order must be: regular parameters *args **kwargs

  • regular parameters
  • *args
  • **kwargs

Example

def my_function(title, *args, **kwargs):
  print("Title:", title)
  print("Positional arguments:", args)
  print("Keyword arguments:", kwargs)

  my_function("User Info", "Emil", "Tobias", age = 25, city = "Oslo")

Unpacking Arguments

The * and ** operators can also be used when calling functions to unpack (expand) a list or dictionary into separate arguments.

Unpacking Lists with *

If you have values stored in a list, you can use * to unpack them into individual arguments:

Example

def my_function(a, b, c):
  return a + b + c

numbers = [1, 2, 3]
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:

Example

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")

Remember

Use * and ** in function definitions to collect arguments, and use them in function calls to unpack arguments.

Previous

Python Function Arguments

Next

Python Scope

This chapter

Overview
100

Lessons

265m

Read time

1. Python Tutorial2. Python Introduction3. Python Getting Started4. Python Syntax5. Python Statements6. Python Output / Print7. Python Output Numbers8. Python Comments9. Python Variables10. Python - Variable Names11. Python Variables - Assign Multiple Values12. Python - Output Variables13. Python - Global Variables14. Python Data Types15. Python Numbers16. Python Casting17. Python Strings18. Python - Slicing Strings19. Python - Modify Strings20. Python - String Concatenation21. Python - Format - Strings22. Python - Escape Characters23. Python - String Methods24. Python Booleans25. Python Operators26. Python Arithmetic Operators27. Python Assignment Operators28. Python Comparison Operators29. Python Logical Operators30. Python Identity Operators31. Python Membership Operators32. Python Bitwise Operators33. Python Operator Precedence34. Python Lists35. Python - Access List Items36. Python - Change List Items37. Python - Add List Items38. Python - Remove List Items39. Python - Loop Lists40. Python - List Comprehension41. Python - Sort Lists42. Python - Copy Lists43. Python - Join Lists44. Python - List Methods45. Python Tuples46. Python - Access Tuple Items47. Python - Update Tuples48. Python - Unpack Tuples49. Python - Loop Tuples50. Python - Join Tuples51. Python - Tuple Methods52. Python Sets53. Python - Access Set Items54. Python - Add Set Items55. Python - Remove Set Items56. Python - Loop Sets57. Python - Join Sets58. Python frozenset59. Python - Set Methods60. Python Dictionaries61. Python - Access Dictionary Items62. Python - Change Dictionary Items63. Python - Add Dictionary Items64. Python - Remove Dictionary Items65. Python - Loop Dictionaries66. Python - Copy Dictionaries67. Python - Nested Dictionaries68. Python Dictionary Methods69. Python If Statement70. Python Elif Statement71. Python Else Statement72. Python Shorthand If73. Python Logical Operators74. Python Nested If75. Python Pass Statement76. Python Match77. Python While Loops78. Python For Loops79. Python Functions80. Python Function Arguments81. Python *args and **kwargs82. Python Scope83. Python Decorators84. Python Lambda85. Python Recursion86. Python Generators87. Python range88. Python Arrays89. Python Iterators90. Python Modules91. Python Datetime92. Python Math93. Python JSON94. Python RegEx95. Python PIP96. Python Try Except97. Python String Formatting98. Python None99. Python User Input100. Python Virtual Environment

On this page

*args and **kwargsArbitrary Arguments - *argsWhat is *args?Using *args with Regular ArgumentsPractical Example with *argsArbitrary Keyword Arguments - **kwargsWhat is **kwargs?Using **kwargs with Regular ArgumentsCombining *args and **kwargsUnpacking ArgumentsUnpacking Lists with *Unpacking Dictionaries with **