Python: Function
The following is a example of defining a function.
# -*- coding: utf-8 -*- # python def ff(x, y): """ff(x, y) returns x+y.""" return x+y print ff(3,4) # prints 7
A string immediately following the function def
line is the function's documentation.
return
is optional. If a function does not return anything, 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.
# -*- coding: utf-8 -*- # python # function with unspecified number of arguments. use * before the name. def ff(*xx): # xx is received as a tuple. print "first arg:", xx[0] print "total args:", len(xx) return xx rr = ff(3, 4, 5) print rr # (3,4,5) print type(rr) # <type '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.
# -*- coding: utf-8 -*- # python # 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.
# -*- coding: utf-8 -*- # python # use 「**‹name›」 to receive unspecified number of keyword arguments def ff(**ddd): # ddd is received as a dictionary return ddd print ff( z = 8, c = 7, aa = 4, b = 3) # {'aa': 4, 'c': 7, 'z': 8, 'b': 3}
The **name
can be used with normal paramaters. But it must be the last.
# -*- coding: utf-8 -*- # python def ff(a, b=1, c=1, **xyz): # xyz is a dictionary print "a ⇒", a print "b ⇒", b print "c ⇒", c print "xyz ⇒", xyz ff(3, rabbit = 7, cat = "a", tiger = 33, c = 8) # a ⇒ 3 # b ⇒ 1 # c ⇒ 8 # xyz ⇒ {'tiger': 33, 'rabbit': 7, 'cat': 'a'}
The positional parameters, and *tup
tuple and **dict
dictionary can be used together, but tuple must come first.
# -*- coding: utf-8 -*- # python 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: {'tiger': 33, 'rabbit': 7, 'cat': 9}
If you have a question, put $5 at patreon and message me.