Python: Function
Here's a example of defining a function.
def ff(x, y): """ff(x, y) returns x+y.""" return x+y print(ff(3,4)) # 7
A string immediately following the function def
line is the function's documentation.
return
is optional. If a function does not return statement, it returns None
.
Unspecified Number of Positional Parameters
To define unspecified number of positional parameters, use
*name
as last item. Your function will receive it as a
Tuple
.
# function with unspecified number of args def ff(*x): # x is received as a tuple. return x rr = ff(5,6) print(rr) # (5, 6) print(type(rr)) # <class 'tuple'>
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}