- Python 中的内置函数有很多:
https://docs.python.org/2/library/functions.html#sum - Python函数返回值
关于Python函数返回值,python函数返回值只有单一值,而返回的“多值”,实际上只是一种假象,因为python函数返回的多值是一个元祖 tuple,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。 - 递归函数
一个函数内部,调用自身本身,这个函数是递归函数。
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。
例如:
# 阶乘 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)
- 在使用递归函数需要注意防止栈溢出。 在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小是无线的,所以,递归调用的次数过多,会导致栈溢出。
- 函数的默认参数
函数的默认参数作用是简化调用,在使用默认参数的情况下,可以只把必须的参数传进去,而不需要传默认的参数。 同时也可以传入额外的参数来覆盖默认参数值。
例如Python自带的 int()函数,其实有两个参数值,我们既可以传入一个参数,又可以传入两个参数,int()函数的第二个参数是转换进制,如果不传,默认是十进制(base = 10), 如果传了,就用传入的参数。由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
int(‘123’)
结果: 123
int(‘123’, 8)
结果: 83
- 定义带默认参数的函数:
# 定义一个 greet() 函数,它包含一个默认参数,如果没有传入,打印 ‘Hello, world.’,如果传入,打印 ‘Hello, xxx.’
def greet(name = ‘world’):
print ‘hello,’,name +’.’
greet()
greet(‘Chris’)
结果:hello, world.
hello, Chris.
- 函数可变的参数
如果想让一个函数能接受任意个参数,可以定义一个可变参数:
def fn(*args):
print args
>>> fn()
()
>>> fn(‘a’)
(‘a’,)
>>> fn(‘a’,’b’)
(‘a’,’b’)
关于可变参数,Python解析器会把传入的一组参数组装成一个tuple(元祖)传递给可变参数,因此,在函数内部,可以直接把变量args 看成一个tuple。