KEMBAR78
Python Functions (PyAtl Beginners Night) | PDF
Python Functions 
Rick Copeland
Python Functions 
Rick Copeland
Python Functions 
Rick Copeland
Beginner’s 
Night 
Python Functions 
Rick Copeland
What is a function, anyway?
What is a function, anyway? 
• Reusable bit of Python code
What is a function, anyway? 
• Reusable bit of Python code 
• … beginning with the keyword def
What is a function, anyway? 
• Reusable bit of Python code 
• … beginning with the keyword def 
• … that can use parameters (placeholders)
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
Define a Function 
>>> def x_squared(x):! 
... return x * x
Use a Function 
>>> def x_squared(x):! 
... return x * x! 
...! 
>>> x_squared(1)! 
1! 
>>> x_squared(2)! 
4! 
>>> x_squared(4)! 
16
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
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
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
Substitution 
x_squared(4)
Substitution 
x_squared(4) >>> def x_squared(x):! 
... return x * x
Substitution 
x_squared(4) >>> def x_squared(x):! 
... return x * x 
x = 4! 
return x * x
Substitution 
x_squared(4) >>> def x_squared(x):! 
... return x * x 
x = 4! 
return x * x 
4 * 4
Substitution 
x_squared(4) >>> def x_squared(x):! 
... return x * x 
x = 4! 
return x * x 
4 * 4 
16
Recursion
Recursion 
• Functions can call themselves
Recursion 
• Functions can call themselves 
• … we call this recursion
Recursion 
>>> def x_fact(x):! 
... if x < 2:! 
... return 1! 
... else:! 
... return x * x_fact(x-1)! 
...! 
>>> x_fact(3)! 
6
Recursion, step-by-step 
fact(3)
Recursion, step-by-step 
fact(3) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
return 3 * x_fact(3-1) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) return 3 * x_fact(3-1) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) 
(3 * (2 * fact(1))) 
return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) 
(3 * (2 * fact(1))) 
return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
return 1 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) 
(3 * (2 * fact(1))) 
(3 * (2 * (1))) 
return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
return 1 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) 
(3 * (2 * fact(1))) 
(3 * (2 * (1))) 
(3 * (2)) 
return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
return 1 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Recursion, step-by-step 
fact(3) 
(3 * fact(2)) 
(3 * (2 * fact(1))) 
(3 * (2 * (1))) 
(3 * (2)) 
return 3 * x_fact(3-1) 
return 2 * x_fact(2-1) 
return 1 
(6) 
def x_fact(x):! 
if x < 2:! 
return 1! 
else:! 
return x * x_fact(x-1)
Different ways to call 
functions
Different ways to call 
functions 
def my_awesome_function(something): …
Different ways to call 
functions 
def my_awesome_function(something): …
Different ways to call 
functions 
def my_awesome_function(something): … 
def my_awesome_function(something, something_else): …
Different ways to call 
functions 
def my_awesome_function(something): … 
def my_awesome_function(something, something_else): …
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): …
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): …
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): …
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): …
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): ...
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?!
Named Arguments 
>>> my_awesome_function(! 
something=1,! 
something_else=4,! 
banana=6,! 
pear=9,! 
apple=12)
Default Arguments 
• When you’re calling a function, you have to give 
Python all the argument values (1 per 
parameter)
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
Default Arguments
Default Arguments 
def my_awesome_function(something, something_else,
Default Arguments 
def my_awesome_function(something, something_else, 
banana=1, apple=2, pear=3): ...
Default Arguments 
def my_awesome_function(something, something_else, 
banana=1, apple=2, pear=3): ... 
Now when you say this:
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)
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:
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)
Variable Parameters 
• Sometimes it’s nice to be able to call a function 
with different numbers of arguments…
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)…
Variable Parameters 
def sum(*values):! 
result = 0! 
for v in values:! 
result += v! 
return result
Variable Parameters 
• Python “packs” all the 
remaining arguments into a 
tuple 
def sum(*values):! 
result = 0! 
for v in values:! 
result += v! 
return result
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
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)
Variable Arguments 
>>> def sum(*values):! 
... result = 0! 
... for v in values:! 
... result += v! 
... return result! 
...! 
>>> sum(*[1,2,3])! 
6
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
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
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
Keyword Parameters
Keyword Parameters 
• Sometimes I want a function, but I don’t know 
what I want to name the arguments…
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…
Keyword Parameters
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}
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}
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}
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}
Keyword Parameters Step by 
Step 
>>> make_dict(a=5, b=6)
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
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)
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
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
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}
Keyword Arguments 
>>> make_dict(**{'a': 10, 'b': 20})! 
{'a': 10, 'b': 20}
Keyword Arguments 
• Python “unpacks” the dict into 
separate arguments 
>>> make_dict(**{'a': 10, 'b': 20})! 
{'a': 10, 'b': 20}
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}
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
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct)
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct) 
def x_times_y(x, y):! 
return x * y
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct) 
x_times_y(x=2, y=6) 
def x_times_y(x, y):! 
return x * y
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct) 
x_times_y(x=2, y=6) 
def x_times_y(x, y):! 
return x * y 
x=2! 
y=6! 
return x * y
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct) 
x_times_y(x=2, y=6) 
def x_times_y(x, y):! 
return x * y 
x=2! 
y=6! 
return x * y 
return 2 * 6
Keyword Arguments Step by 
Step 
>>> dct = {'x': 2, 'y': 6}! 
>>> x_times_y(**dct) 
x_times_y(x=2, y=6) 
def x_times_y(x, y):! 
return x * y 
x=2! 
y=6! 
return x * y 
return 2 * 6 
12
Is there more?
Is there more? 
• Of course there’s more, but it’s beginner’s night ;-)
Is there more? 
• Of course there’s more, but it’s beginner’s night ;-) 
• But what can I do now?
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)
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
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)
“Any questions?” 
–Rick Copeland

Python Functions (PyAtl Beginners Night)

  • 1.
  • 2.
  • 3.
  • 4.
    Beginner’s Night PythonFunctions Rick Copeland
  • 5.
    What is afunction, anyway?
  • 6.
    What is afunction, anyway? • Reusable bit of Python code
  • 7.
    What is afunction, anyway? • Reusable bit of Python code • … beginning with the keyword def
  • 8.
    What is afunction, anyway? • Reusable bit of Python code • … beginning with the keyword def • … that can use parameters (placeholders)
  • 9.
    What is afunction, anyway? • Reusable bit of Python code • … beginning with the keyword def • … that can use parameters (placeholders) • … that can provide a return value
  • 10.
    Define a Function >>> def x_squared(x):! ... return x * x
  • 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
  • 15.
  • 16.
    Substitution x_squared(4) >>>def x_squared(x):! ... return x * x
  • 17.
    Substitution x_squared(4) >>>def x_squared(x):! ... return x * x x = 4! return x * x
  • 18.
    Substitution x_squared(4) >>>def x_squared(x):! ... return x * x x = 4! return x * x 4 * 4
  • 19.
    Substitution x_squared(4) >>>def x_squared(x):! ... return x * x x = 4! return x * x 4 * 4 16
  • 20.
  • 21.
    Recursion • Functionscan call themselves
  • 22.
    Recursion • Functionscan call themselves • … we call this recursion
  • 23.
    Recursion >>> defx_fact(x):! ... if x < 2:! ... return 1! ... else:! ... return x * x_fact(x-1)! ...! >>> x_fact(3)! 6
  • 24.
  • 25.
    Recursion, step-by-step fact(3) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 26.
    Recursion, step-by-step fact(3) return 3 * x_fact(3-1) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 27.
    Recursion, step-by-step fact(3) (3 * fact(2)) return 3 * x_fact(3-1) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 28.
    Recursion, step-by-step fact(3) (3 * fact(2)) return 3 * x_fact(3-1) return 2 * x_fact(2-1) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 29.
    Recursion, step-by-step fact(3) (3 * fact(2)) (3 * (2 * fact(1))) return 3 * x_fact(3-1) return 2 * x_fact(2-1) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 30.
    Recursion, step-by-step fact(3) (3 * fact(2)) (3 * (2 * fact(1))) return 3 * x_fact(3-1) return 2 * x_fact(2-1) return 1 def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 31.
    Recursion, step-by-step fact(3) (3 * fact(2)) (3 * (2 * fact(1))) (3 * (2 * (1))) return 3 * x_fact(3-1) return 2 * x_fact(2-1) return 1 def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 32.
    Recursion, step-by-step fact(3) (3 * fact(2)) (3 * (2 * fact(1))) (3 * (2 * (1))) (3 * (2)) return 3 * x_fact(3-1) return 2 * x_fact(2-1) return 1 def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 33.
    Recursion, step-by-step fact(3) (3 * fact(2)) (3 * (2 * fact(1))) (3 * (2 * (1))) (3 * (2)) return 3 * x_fact(3-1) return 2 * x_fact(2-1) return 1 (6) def x_fact(x):! if x < 2:! return 1! else:! return x * x_fact(x-1)
  • 34.
    Different ways tocall functions
  • 35.
    Different ways tocall functions def my_awesome_function(something): …
  • 36.
    Different ways tocall functions def my_awesome_function(something): …
  • 37.
    Different ways tocall functions def my_awesome_function(something): … def my_awesome_function(something, something_else): …
  • 38.
    Different ways tocall functions def my_awesome_function(something): … def my_awesome_function(something, something_else): …
  • 39.
    Different ways tocall functions def my_awesome_function(something): … def my_awesome_function(something, something_else): … def my_awesome_function(something, something_else, banana): …
  • 40.
    Different ways tocall functions def my_awesome_function(something): … def my_awesome_function(something, something_else): … def my_awesome_function(something, something_else, banana): …
  • 41.
    Different ways tocall 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): …
  • 42.
    Different ways tocall 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): …
  • 43.
    Different ways tocall 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): ...
  • 44.
    Different ways tocall 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
  • 48.
  • 49.
    Default Arguments defmy_awesome_function(something, something_else,
  • 50.
    Default Arguments defmy_awesome_function(something, something_else, banana=1, apple=2, pear=3): ...
  • 51.
    Default Arguments defmy_awesome_function(something, something_else, banana=1, apple=2, pear=3): ... Now when you say this:
  • 52.
    Default Arguments defmy_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 defmy_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 defmy_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 defsum(*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
  • 65.
  • 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…
  • 68.
  • 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}
  • 73.
    Keyword Parameters Stepby Step >>> make_dict(a=5, b=6)
  • 74.
    Keyword Parameters Stepby 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 Stepby 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 Stepby 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 Stepby 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 Stepby 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}
  • 79.
    Keyword Arguments >>>make_dict(**{'a': 10, 'b': 20})! {'a': 10, 'b': 20}
  • 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
  • 83.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct)
  • 84.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct) def x_times_y(x, y):! return x * y
  • 85.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct) x_times_y(x=2, y=6) def x_times_y(x, y):! return x * y
  • 86.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct) x_times_y(x=2, y=6) def x_times_y(x, y):! return x * y x=2! y=6! return x * y
  • 87.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct) x_times_y(x=2, y=6) def x_times_y(x, y):! return x * y x=2! y=6! return x * y return 2 * 6
  • 88.
    Keyword Arguments Stepby Step >>> dct = {'x': 2, 'y': 6}! >>> x_times_y(**dct) x_times_y(x=2, y=6) def x_times_y(x, y):! return x * y x=2! y=6! return x * y return 2 * 6 12
  • 89.
  • 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)
  • 97.