1. Python 中的内置函数有很多:
    https://docs.python.org/2/library/functions.html#sum
  2. Python函数返回值
    关于Python函数返回值,python函数返回值只有单一值,而返回的“多值”,实际上只是一种假象,因为python函数返回的多值是一个元祖 tuple,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。
  3. 递归函数
    一个函数内部,调用自身本身,这个函数是递归函数。
    递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。
    例如:
# 阶乘 n! = 1 * 2 * 3 * … * n, 用函数 fact(n)表示 
 # fact(n) = n! = 1 * 2 * 3 * … * (n-1) * n = (n-1)! * n = fact(n-1) * n 
 # fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理 
 # 用fact(n)用递归函数表示为: 
 def fact(n): 
   if n==1: 
     return 1 
   return n * fact(n - 1)
  1. 在使用递归函数需要注意防止栈溢出。 在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小是无线的,所以,递归调用的次数过多,会导致栈溢出。
  2. 函数的默认参数
    函数的默认参数作用是简化调用,在使用默认参数的情况下,可以只把必须的参数传进去,而不需要传默认的参数。 同时也可以传入额外的参数来覆盖默认参数值。
    例如Python自带的 int()函数,其实有两个参数值,我们既可以传入一个参数,又可以传入两个参数,int()函数的第二个参数是转换进制,如果不传,默认是十进制(base = 10), 如果传了,就用传入的参数。由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面

int(‘123’)
结果: 123
int(‘123’, 8)
结果: 83

  1. 定义带默认参数的函数:
# 定义一个 greet() 函数,它包含一个默认参数,如果没有传入,打印 ‘Hello, world.’,如果传入,打印 ‘Hello, xxx.’
def greet(name = ‘world’): 
   print ‘hello,’,name +’.’ 
    
 greet() 
 greet(‘Chris’)


结果:hello, world.
   hello, Chris.

  1. 函数可变的参数
    如果想让一个函数能接受任意个参数,可以定义一个可变参数:
def fn(*args): 
     print args 
  >>> fn() 
  () 
  >>> fn(‘a’) 
  (‘a’,) 
  >>> fn(‘a’,’b’) 
  (‘a’,’b’)

关于可变参数,Python解析器会把传入的一组参数组装成一个tuple(元祖)传递给可变参数,因此,在函数内部,可以直接把变量args 看成一个tuple。