Functional Programming
Function Object
  • Everything in a Python program is an object, a function is also an object
  • def func():
        print('Hello World!')
    
    f = func
    
    print(id(f), id(func)) # 140232159555440 140232159555440
    print(type(f)) # <class 'function'>
    print(f) # <function func at 0x7f81700e6f70>
    f() # Hello World!
    
    			
    Function Inspect Information
    import inspect
    
    # function comment
    def func():
        """Function Doc
        """
        print('Hello World!')
    
    if __name__ == '__main__':
        f = func
    
        print(inspect.isfunction(f)) # check if an object is a function
        print(inspect.getdoc(f)) # get the object doc string
        print(inspect.getcomments(f)) # get comments before function
    
        print(inspect.getfile(f)) # get the file name in which the function is defined
        print(inspect.getsource(f)) # get the source code
                
    Function Composition
  • To take another function as an argument
  • The inner function is referred to as a callback, because a call back to the inner function can modify the outer function’s behavior
  • def inner():
        print('Hello World!')
    
    def outer(f):
        f()
    
    outer(inner) # Hello World!
                
    def inner(a, b):
        return a+b
    
    def outer(f, x, y):
        return f(x, y)
    
    print(outer(inner, 1, 2)) # 3
                
    Return Function
  • To return another function to its caller
  • def outer():
        def inner():
            print('Hello World!')
    
        return inner
    
    f = outer()
    f() # Hello World!
                
    Anonymous Function
  • lambda [parameter_list]: [expression], return one single expression
  • add = lambda a, b: a+b
    
    print(add(1, 2))
    
    print((lambda a, b: a+b)(1, 2))
                
    Reference
  • Functional Programming in Python: When and How to Use It