Case Study: Python: Functional Programming
Case Study: Python: Functional Programming
Functional Programming
08, 2020
Immutable Data
lambda function
First-class functions
High-order functions: map, filter, reduce
Closure
Decorator
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4)
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4)
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4) => 7
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4) => 7
Anonymous function
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4) => 7
Anonymous function
Any number of parameters
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4) => 7
Anonymous function
Any number of parameters
Body is just one expression
Syntax:
lambda ( <param > ( , <param ) ∗ ) ? : <exp>
For example,
lambda a,b: a + b
(lambda a,b: a + b)(3,4) => 7
x = lambda a,b: a + b
x(3,4) => 7
Anonymous function
Any number of parameters
Body is just one expression
Used in high-order functions
def f o o ( x , y ) :
r e t u r n x∗y
print ( foo ( 3 , 4 ) )
def f o o ( x , y ) :
r e t u r n x∗y
print ( foo ( 3 , 4 ) ) => 12
@log_decorator
def f o o ( x , y ) :
r e t u r n x∗y
print ( foo ( 3 , 4 ) )
@log_decorator
def f o o ( x , y ) :
r e t u r n x∗y
print ( foo ( 3 , 4 ) )
=> foo is running
=> 12
@log_decorator
def f o o ( x , y ) :
r e t u r n x∗y
print ( foo ( 3 , 4 ) )
How?
def l o g _ d e c o r a t o r ( f u n c ) :
def i n n e r ( ∗ arg ) :
p r i n t ( f u n c . __name__+ " i s r u n n i n g " )
r e t u r n f u n c ( ∗ arg )
return inner
@log_decorator def f o o ( x , y ) :
def f o o ( x , y ) : r e t u r n x∗y
r e t u r n x∗y foo = log_decorator ( foo )
print ( foo ( 3 , 4 ) ) print ( foo ( 3 , 4 ) )
How?
def l o g _ d e c o r a t o r ( f u n c ) :
def i n n e r ( ∗ arg ) :
p r i n t ( f u n c . __name__+ " i s r u n n i n g " )
r e t u r n f u n c ( ∗ arg )
return inner