Function
Pass by reference
  1. # pass by reference
  2. def f2(m, im):
  3. print '----------------Inside function-------------'
  4. print id(m), m; # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
  5. print id(im), im; # 38097024, 10
  6. m.append(100);
  7. im = 100;
  8. print id(m), m # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
  9. print id(im), im # 38098848, 100
  10. print '---------------Leave function--------------'
  11.  
  12. a = 10; # 38097024 10
  13. b = range(10) # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
  14. print id(a), a
  15. print id(b), b
  16. f2(b, a);
  17. print id(a), a # 38097024, 10
  18. print id(b), b # 13977378998840, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
Default arguments
  1. # default arguments
  2. def f1(p1, p2 = 10):
  3. print p1, p2
  4.  
  5. f1(1)
Keyword arguments
  1. # keyword arguments
  2. def f3(p1 = 1, p2 = 2):
  3. print p1, p2
  4.  
  5. f3(p2 = 10)
Variable-length arguments
  1. # variabel-length arguments
  2. def f4(*vartuple):
  3. print len(vartuple);
  4. print vartuple; # vartuple is a tuple
  5. for i in vartuple:
  6. print i
  7.  
  8. f4(1, 2, 3, 'end')
* in Function Calls
  • expands list or tuple into separate elements
    1. #!/usr/bin/python
    2.  
    3. # pass by reference
    4. def f(a, b):
    5. print a, b;
    6.  
    7. l = [10, 20]; # singularize list or tuple
    8. f(*l); # 10 20
    Arbitary Key Parameters
  • pass parameters and their values as a dict to function
    1. #!/usr/bin/python
    2.  
    3. def f(**args):
    4. print args;
    5. for k in args.keys():
    6. print k, args[k];
    7.  
    8. f(inFile = 'input', outFile = 'output');
    ** in Function Calls
  • pass keyworded variables as a dict to function
    1. #!/usr/bin/python
    2.  
    3. def f(**args):
    4. print args;
    5. for k in args.keys():
    6. print k, args[k];
    7.  
    8. d = {'inFile':'input', 'outFile':'output'}; # singularize dict
    9. f(**d);
    Lambda
    1. #!/usr/bin/python
    2.  
    3. #lambda
    4. sum = lambda arg1, arg2: arg1+arg2;
    5.  
    6. print sum(10, 20); #30
    7.  
    8. #map
    9. def t(arg):
    10. return arg*10;
    11.  
    12. l = [1, 2, 3, 4];
    13. print map(t, l); #[10, 20, 30, 40], use function
    14. print map(lambda x: x*10, l); #[10, 20, 30, 40], using lambda
    15.  
    16. #filter
    17. print filter(lambda x: x%2 == 0, l); #[2, 4]
    18.  
    19. #reduce
    20. print reduce(lambda x, y: x+y, l); #10
    Return
  • return multiple values, which are saved in a tuple
    1. #!/usr/bin/python
    2.  
    3. def getNums():
    4. return 1, 2
    5.  
    6. a, b = getNums()
    7. print a, b # 1, 2
    8.  
    9. _, b = getNums() # use _ to hold a place
    10. print b # 2
    11.  
    12. t = getNums()
    13. print t # (1, 2), t is a tuple
    1. #!/usr/bin/python
    2.  
    3. def getNum_1():
    4. return 1 # return an integer
    5.  
    6. def getNum_2():
    7. return # return nothing
    8.  
    9. def getNum_3():
    10. return None # return None
    11.  
    12. def getNum_4():
    13. pass # no return will return None
    14.  
    15. def main():
    16. if getNum_1() is None:
    17. print getNum_1() # not print
    18. if getNum_2() is None:
    19. print getNum_2() # None
    20. if getNum_3() is None:
    21. print getNum_3() # None
    22. if getNum_4() is None:
    23. print getNum_4() # None
    24.  
    25. if __name__ == '__main__':
    26. main()
    Recursive
    1. #!/usr/bin/python
    2.  
    3. def factorial(n):
    4. '''factorial
    5. Args:
    6. n (int), integer number
    7. Return:
    8. int, factorial number
    9. '''
    10. if n == 0:
    11. return 1;
    12. else:
    13. return n*factorial(n-1);
    14.  
    15. def main():
    16. print factorial(10);
    17.  
    18. if __name__ == '__main__':
    19. main()
    Reference