了解了一些比较基础的东西后,继续学习 python 的函数
函数的定义与调用
Python 中使用def
关键字来定义函数,如:
1 | def my_fun(name): |
如果想定义一个空函数,可以使用pass
语句,如:
1 | def nothong(): |
python 解释器在运行的时候会自动检查传入的参数,如果参数类型不对,就会抛出错误。
默认参数
有的时候我们每次调用有的参数可以省略,那就可以使用默认参数,如:
1 | def sayHi(name='everyone'): |
默认参数的坑
1 | def add_some(L=[]): |
明显默认参数不是我们想要的结果,Python 函数在定义的时候,默认参数 L 的值就被计算出来了,即[],因为默认参数 L 也是一个变量,它指向对象[],每次调用该函数,如果改变了 L 的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!我们可以这样来实现上面的需求:
1 | def add_end(L=None): |
可变参数
很多时候我们在调用函数时不能确定参数的个数,那么这个时候就需要使用可变参数了,如,我们计算一组数字的平方和:
1 | # 按照之前的方式来写 |
定义可变参数和定义一个 list 或 tuple 参数相比,仅仅在参数前面加了一个号。在函数内部,参数 numbers 接收到的是一个 tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括 0 个参数。如果已经有一个 list 或者 tuple,Python 允许你在 list 或 tuple 前面加一个号,把 list 或 tuple 的元素变成可变参数传进去。
关键字参数
关键字参数允许你传入 0 个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict。如:
1 | def person(name, age, **kw): |
命名关键字参数
和关键字参数*_
kw 不同,命名关键字参数需要一个特殊分隔符_,*
后面的参数被视为命名关键字参数如:
1 | def person(name, *, age, gender): |
参数组合
在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这 5 种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
[越努力,越幸运!]