Python: Function Keyword Arguments

By Xah Lee. Date: .

Named Parameters (Keyword Arguments)

A function can have Named Parameters, called Keyword Argument in Python.

• To define keyword parameters, use the form `name = default`.
• They must come after positional parameters.

Python's “keyword argument” are automatically optional. If no argument is given in a function call, a default value is used.

```# function with keyword parameters.

# Keyword parameters are automatically optional, with default values.
# They must come after positional parameters, if any
def ff(x, y=100, z=200):
return "x ⇒ {}, y ⇒ {}, z ⇒ {}".format(x, y, z)

print(ff(3))
# x ⇒ 3, y ⇒ 100, z ⇒ 200

# optional parameter name can be omitted. If so, they go by order.
print(ff(3, 2))
# x ⇒ 3, y ⇒ 2, z ⇒ 200

print(ff(3, 5, 6))
# x ⇒ 3, y ⇒ 5, z ⇒ 6

# keyword argument must come after positional arguments
print(ff(3, y=2))
# x ⇒ 3, y ⇒ 2, z ⇒ 200

print(ff(3, z=2))
# x ⇒ 3, y ⇒ 100, z ⇒ 2

# keyword arguments can be any order
print(ff(3, z=8, y=9))
# x ⇒ 3, y ⇒ 9, z ⇒ 8
```

Unspecified Number of Unnamed Keyword Parameters

For unspecified number of unnamed keyword parameters. You need to put a `**name` as last item in your parameter list in definition. Your function will receive it as a dictionary.

```# unspecified number of keyword args
def ff(**dd):
return dd

rr = ff( z = 8, c = 7, aa = 4, b = 3)

print(rr)
# {'z': 8, 'c': 7, 'aa': 4, 'b': 3}

print(type(rr))
# <class 'dict'>
```

The `**name` can be used with normal paramaters. But it must be the last.

```def ff(a, b=1, c=1, **xyz):
# xyz is a dictionary
print("a is: ", a)
print("b is: ", b)
print("c is: ", c)
print("xyz is: ", xyz)

# note, no b
ff(3, rabbit = 7, cat = "a", tiger = 33, c = 8)

# a is:  3
# b is:  1
# c is:  8
# xyz is:  {'rabbit': 7, 'cat': 'a', 'tiger': 33}
```

The positional parameters, and `*tup` tuple and `**dict` dictionary can be used together, but tuple must come first.

```def ff(a, *mmm, **zzz):
# mmm is a tuple
# zzz is a dictionary
print("a is:", a)
print("mmm is:", mmm)
print("zzz is:", zzz)

ff(3, 4, 5, 6, rabbit = 7, cat = 9, tiger = 33)

# a is: 3
# mmm is: (4, 5, 6)
# zzz is: {'rabbit': 7, 'cat': 9, 'tiger': 33}
```