廖雪峰python学习笔记【5】函数的参数和递归函数
一、函数的参数
1. 位置参数:参数个数和位置确定,调用者必须依次传入。
2. 默认参数:
2.1 定义方式:位置参数在前,默认参数在后。示例:def my_power(base, sqr=2) : # 不传入默认参数sqr时,默认计算base的2次方;传入sqr参数时,计算base的sqr次方。
2.2 原则:变化大的参数作为位置参数,变化小的参数作为默认参数,降低程序调用的复杂性。
2.3 当定义的函数存在多个默认参数时,调用和可以不按默认参数的顺序输入默认参数,但此时必须提供默认参数名。
2.4 注意:关于默认参数的内存分配,在函数定义时,已经分配了存储默认参数变量的内存和默认参数指向的对象的内存。如果改变了默认参数指向对象的内存中的值,则每次调用函数,默认参数的值都被改变了。因此默认参数必须指向str和None等不可变对象!!!
2.4.1
3. 可变参数:
3.1 传入参数的个数是可变的。这些可变参数在函数调用是自动组装成一个tuple。示例:def my_power(*params) : # 在参数名前加'*'表示可变参数。
3.2 如果事先定义了一个list或tuple时,希望将list或tuple的元素作为可变参数传递给函数,可通过my_power(*list)或my_power(*tuple)的方式调用函数。
4. 关键字参数:
4.1 允许传入0个或任意个含参数名的参数。关键字参数在函数调用时,自动组装为一个dict。
4.2 示例:def person(name, age, **kw):
4.2.1 调用方式:
1)print(person("lfc", 28, city = "beijing"))
2)print(person("lfc", 28, **{"city" : "beijing"}))
4.3 事先定义好的dict可通过person(**dict)的方式调用。
5. 命名关键字参数:定义失败。
6. 参数组合:定义函数时,各种类型的参数需按如下顺序存放: 必选参数、默认参数、可变参数、命名关键字参数和关键字参数。