一.
1.如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
2.函数可以同时返回多个值,但其实就是一个tuple。
二.参数.
1 默认参数
定义默认参数要牢记一点:默认参数必须指向不变对象!
2 可变参数
可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
形式:参数前面加*
如果当前有一个list或者tuple,Python允许你在list或tuple前面加一个*号,把list或 tuple的元素变成可变参数传进去:
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
3.关键字参数
1.关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。参数是字典类型
**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
4.命名关键字参数
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。命名关键字参数限制关键字参数的名字。
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
命名关键字参数必须传入参数名。如果没有传入参数名,调用将报错。
命名关键字参数可以有缺省值,从而简化调用。
三.递归函数
return 返回的值避免含有表达式,从而避免栈溢出
举例:
1到n的乘积:
应该避免的写法,n太大的情况会栈溢出
尾递归优化,只返回函数本身。表达式在函数调用前就会被计算,不影响函数调用。