Function
Pass by reference
# pass by reference
def f2(m, im):
    print '----------------Inside function-------------'
    print id(m), m; # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
    print id(im), im; # 38097024, 10
    m.append(100);
    im = 100;
    print id(m), m # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
    print id(im), im # 38098848, 100
    print '---------------Leave function--------------'

a = 10; # 38097024 10
b = range(10) # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
print id(a), a
print id(b), b
f2(b, a);
print id(a), a # 38097024, 10
print id(b), b # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
			
Default arguments
# default arguments
def f1(p1, p2 = 10):
    print p1, p2

f1(1)
			
Keyword arguments
# keyword arguments
def f3(p1 = 1, p2 = 2):
    print p1, p2

f3(p2 = 10)
			
Variable-length arguments
# variabel-length arguments
def f4(*vartuple):
    print len(vartuple);
    print vartuple; # vartuple is a tuple
    for i in vartuple:
        print i

f4(1, 2, 3, 'end')
			
* in Function Calls
  • expands list or tuple into separate elements
  • #!/usr/bin/python
    
    # pass by reference
    def f(a, b):
        print a, b;
    
    l = [10, 20]; # singularize list or tuple
    f(*l); # 10 20
    			
    Arbitary Key Parameters
  • pass parameters and their values as a dict to function
  • #!/usr/bin/python
    
    def f(**args):
        print args;
        for k in args.keys():
            print k, args[k];
    
    f(inFile = 'input', outFile = 'output');
    			
    ** in Function Calls
  • pass keyworded variables as a dict to function
  • #!/usr/bin/python
    
    def f(**args):
        print args;
        for k in args.keys():
            print k, args[k];
    
    d = {'inFile':'input', 'outFile':'output'}; # singularize dict
    f(**d);
    			
    Lambda
    #!/usr/bin/python
    
    #lambda
    sum = lambda arg1, arg2: arg1+arg2;
    
    print sum(10, 20); #30
    
    #map
    def t(arg):
        return arg*10;
    
    l = [1, 2, 3, 4];
    print map(t, l); #[10, 20, 30, 40], use function
    print map(lambda x: x*10, l); #[10, 20, 30, 40], using lambda
    
    #filter
    print filter(lambda x: x%2 == 0, l); #[2, 4]
    
    #reduce
    print reduce(lambda x, y: x+y, l); #10
    			
    Return
  • return multiple values, which are saved in a tuple
  • #!/usr/bin/python
    
    def getNums():
        return 1, 2
    
    a, b = getNums()
    print a, b # 1, 2
    
    _, b = getNums() # use _ to hold a place
    print b # 2
    
    t = getNums()
    print t # (1, 2), t is a tuple
    			
    #!/usr/bin/python
    
    def getNum_1():
        return 1 # return an integer
    
    def getNum_2():
        return # return nothing
    
    def getNum_3():
        return None # return None
    
    def getNum_4():
        pass # no return will return None
    
    def main():
        if getNum_1() is None:
            print getNum_1() # not print
        if getNum_2() is None:
            print getNum_2() # None
        if getNum_3() is None:
            print getNum_3() # None
        if getNum_4() is None:
            print getNum_4() # None
    
    if __name__ == '__main__':
        main()
    			
    Recursive
    #!/usr/bin/python
    
    def factorial(n):
        '''factorial
        Args:
            n (int), integer number
        Return:
            int, factorial number
        '''
        if n == 0:
            return 1;
        else:
            return n*factorial(n-1);
    
    def main():
        print factorial(10);
    
    if __name__ == '__main__':
        main()
    			
    Reference