6. What is a function, anyway?
• Reusable bit of Python code
7. What is a function, anyway?
• Reusable bit of Python code
• … beginning with the keyword def
8. What is a function, anyway?
• Reusable bit of Python code
• … beginning with the keyword def
• … that can use parameters (placeholders)
9. What is a function, anyway?
• Reusable bit of Python code
• … beginning with the keyword def
• … that can use parameters (placeholders)
• … that can provide a return value
11. Use a Function
>>> def x_squared(x):!
... return x * x!
...!
>>> x_squared(1)!
1!
>>> x_squared(2)!
4!
>>> x_squared(4)!
16
12. Use a Function
• To actually execute the
function we’ve defined, we
need to call or invoke it.
>>> def x_squared(x):!
... return x * x!
...!
>>> x_squared(1)!
1!
>>> x_squared(2)!
4!
>>> x_squared(4)!
16
13. Use a Function
• To actually execute the
function we’ve defined, we
need to call or invoke it.
• In Python, we call functions
by placing parentheses after
the function name…
>>> def x_squared(x):!
... return x * x!
...!
>>> x_squared(1)!
1!
>>> x_squared(2)!
4!
>>> x_squared(4)!
16
14. Use a Function
• To actually execute the
function we’ve defined, we
need to call or invoke it.
• In Python, we call functions
by placing parentheses after
the function name…
• … providing arguments
which match up with the
parameters used when
defining the function
>>> def x_squared(x):!
... return x * x!
...!
>>> x_squared(1)!
1!
>>> x_squared(2)!
4!
>>> x_squared(4)!
16
44. Different ways to call
functions
def my_awesome_function(something): …
def my_awesome_function(something, something_else): …
def my_awesome_function(something, something_else, banana): …
def my_awesome_function(something, something_else, banana, apple): …
def my_awesome_function(something, something_else, banana, apple, pear): ...
>>> my_awesome_function(1, 4, 6, ... # now was it
banana, apple, pear or apple, pear, banana?!
45. Named Arguments
>>> my_awesome_function(!
something=1,!
something_else=4,!
banana=6,!
pear=9,!
apple=12)
46. Default Arguments
• When you’re calling a function, you have to give
Python all the argument values (1 per
parameter)
47. Default Arguments
• When you’re calling a function, you have to give
Python all the argument values (1 per
parameter)
• … but some of these can have default values
51. Default Arguments
def my_awesome_function(something, something_else,
banana=1, apple=2, pear=3): ...
Now when you say this:
52. Default Arguments
def my_awesome_function(something, something_else,
banana=1, apple=2, pear=3): ...
Now when you say this:
>>> my_awesome_function(1, 4, 6)
53. Default Arguments
def my_awesome_function(something, something_else,
banana=1, apple=2, pear=3): ...
Now when you say this:
>>> my_awesome_function(1, 4, 6)
It means this:
54. Default Arguments
def my_awesome_function(something, something_else,
banana=1, apple=2, pear=3): ...
Now when you say this:
>>> my_awesome_function(1, 4, 6)
It means this:
>>> my_awesome_function(!
1, 4, 6,!
apple=2, pear=3)
55. Variable Parameters
• Sometimes it’s nice to be able to call a function
with different numbers of arguments…
56. Variable Parameters
• Sometimes it’s nice to be able to call a function
with different numbers of arguments…
• … something like sum(1,2,3) or sum(1,2)…
57. Variable Parameters
def sum(*values):!
result = 0!
for v in values:!
result += v!
return result
58. Variable Parameters
• Python “packs” all the
remaining arguments into a
tuple
def sum(*values):!
result = 0!
for v in values:!
result += v!
return result
59. Variable Parameters
• Python “packs” all the
remaining arguments into a
tuple
• You can then pass any
number of positional
arguments to the function
def sum(*values):!
result = 0!
for v in values:!
result += v!
return result
60. Variable Parameters
• Python “packs” all the
remaining arguments into a
tuple
• You can then pass any
number of positional
arguments to the function
def sum(*values):!
result = 0!
for v in values:!
result += v!
return result
A tuple is like a list you
can’t modify, e.g. (1,2,3)
61. Variable Arguments
>>> def sum(*values):!
... result = 0!
... for v in values:!
... result += v!
... return result!
...!
>>> sum(*[1,2,3])!
6
62. Variable Arguments
• Python “unpacks” the tuple/
list/etc. into separate
arguments
>>> def sum(*values):!
... result = 0!
... for v in values:!
... result += v!
... return result!
...!
>>> sum(*[1,2,3])!
6
63. Variable Arguments
• Python “unpacks” the tuple/
list/etc. into separate
arguments
• You can call functions that use
variable or fixed arguments
this way
>>> def sum(*values):!
... result = 0!
... for v in values:!
... result += v!
... return result!
...!
>>> sum(*[1,2,3])!
6
64. Variable Arguments
• Python “unpacks” the tuple/
list/etc. into separate
arguments
• You can call functions that use
variable or fixed arguments
this way
>>> def sum(*values):!
... result = 0!
... for v in values:!
... result += v!
... return result!
...!
>>> sum(*[1,2,3])!
6
>>> def x_times_y(x, y):!
... return x * y!
...!
>>> x_times_y(*[4,2])!
8
66. Keyword Parameters
• Sometimes I want a function, but I don’t know
what I want to name the arguments…
67. Keyword Parameters
• Sometimes I want a function, but I don’t know
what I want to name the arguments…
• … hard to come up with a really simple example,
but hopefully this makes sense…
69. Keyword Parameters
>>> def make_dict(**kwargs):!
... result = {}!
... for k, v in kwargs.items():!
... result[k] = v!
... return result!
...!
>>> make_dict(a=5, b=6)!
{'a': 5, 'b': 6}
70. Keyword Parameters
• Python “packs” all the
remaining named arguments
into a dict
>>> def make_dict(**kwargs):!
... result = {}!
... for k, v in kwargs.items():!
... result[k] = v!
... return result!
...!
>>> make_dict(a=5, b=6)!
{'a': 5, 'b': 6}
71. Keyword Parameters
• Python “packs” all the
remaining named arguments
into a dict
• You can then pass any
number of named arguments
to the function
>>> def make_dict(**kwargs):!
... result = {}!
... for k, v in kwargs.items():!
... result[k] = v!
... return result!
...!
>>> make_dict(a=5, b=6)!
{'a': 5, 'b': 6}
72. Keyword Parameters
• Python “packs” all the
remaining named arguments
into a dict
• You can then pass any
number of named arguments
to the function
A dict is like a directory
mapping “keys” to
“values” (e.g. {key: value})
>>> def make_dict(**kwargs):!
... result = {}!
... for k, v in kwargs.items():!
... result[k] = v!
... return result!
...!
>>> make_dict(a=5, b=6)!
{'a': 5, 'b': 6}
74. Keyword Parameters Step by
Step
>>> make_dict(a=5, b=6) def make_dict(**kwargs):!
result = {}!
for k, v in kwargs.items():!
result[k] = v!
return result
75. Keyword Parameters Step by
Step
>>> make_dict(a=5, b=6) def make_dict(**kwargs):!
result = {}!
for k, v in kwargs.items():!
result[k] = v!
return result
kwargs = {'a': 5, 'b': 6}!
make_dict(**kwargs)
76. Keyword Parameters Step by
Step
>>> make_dict(a=5, b=6) def make_dict(**kwargs):!
result = {}!
for k, v in kwargs.items():!
result[k] = v!
return result
kwargs = {'a': 5, 'b': 6}!
make_dict(**kwargs)
kwargs = {'a': 5, 'b': 6}!
result = {}!
for k, v in {'a': 5, 'b': 6}.items():!
result[k] = v!
return result
77. Keyword Parameters Step by
Step
>>> make_dict(a=5, b=6) def make_dict(**kwargs):!
result = {}!
for k, v in kwargs.items():!
result[k] = v!
return result
kwargs = {'a': 5, 'b': 6}!
make_dict(**kwargs)
kwargs = {'a': 5, 'b': 6}!
result = {}!
for k, v in {'a': 5, 'b': 6}.items():!
result[k] = v!
return result
result = {}!
result = {'a': 5}!
result = {'a': 5, 'b': 6}!
return result
78. Keyword Parameters Step by
Step
>>> make_dict(a=5, b=6) def make_dict(**kwargs):!
result = {}!
for k, v in kwargs.items():!
result[k] = v!
return result
kwargs = {'a': 5, 'b': 6}!
make_dict(**kwargs)
kwargs = {'a': 5, 'b': 6}!
result = {}!
for k, v in {'a': 5, 'b': 6}.items():!
result[k] = v!
return result
result = {}!
result = {'a': 5}!
result = {'a': 5, 'b': 6}!
return result
{'a': 5, 'b': 6}
80. Keyword Arguments
• Python “unpacks” the dict into
separate arguments
>>> make_dict(**{'a': 10, 'b': 20})!
{'a': 10, 'b': 20}
81. Keyword Arguments
• Python “unpacks” the dict into
separate arguments
• You can call functions that use
keyword or fixed arguments
this way
>>> make_dict(**{'a': 10, 'b': 20})!
{'a': 10, 'b': 20}
82. Keyword Arguments
>>> make_dict(**{'a': 10, 'b': 20})!
{'a': 10, 'b': 20}
• Python “unpacks” the dict into
separate arguments
• You can call functions that use
keyword or fixed arguments
this way
>>> dct = {'x': 2, 'y': 6}!
>>> x_times_y(**dct)!
12
90. Is there more?
• Of course there’s more, but it’s beginner’s night ;-)
91. Is there more?
• Of course there’s more, but it’s beginner’s night ;-)
• But what can I do now?
92. Is there more?
• Of course there’s more, but it’s beginner’s night ;-)
• But what can I do now?
• Write functions to reuse code (DRY)
93. Is there more?
• Of course there’s more, but it’s beginner’s night ;-)
• But what can I do now?
• Write functions to reuse code (DRY)
• Write recursive functions
94. Is there more?
• Of course there’s more, but it’s beginner’s night ;-)
• But what can I do now?
• Write functions to reuse code (DRY)
• Write recursive functions
• Create and use functions with different kinds of
arguments and parameters (named, *args,
**kwargs)