定义函数
在python中定义函数使用def
语句,依次写出函数名,参数,函数体,返回值等。
1 | def my_abs(x): |
如果还没有想好函数体,那么可以使用pass
占位符来让代码先运行起来
1 | def my_abs(x): |
注意:缺少了pass,什么都没有会报错的
参数
参数在定义函数的时候会声明,对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就可以了。python的函数定义非常简单,但非常灵活。除了正常定义的必选的参数外,还可以使用默认参数、可变参数和关键字参数。
必填参数
必选参数不可不传,不传的话会报错
1 | my_abs() # 报错 |
默认参数
默认参数可以简化函数的调用,但是必须要注意:
- 必选参数在前,默认参数在后
- 变化大的默认参数在前,变化小的默认参数在后
- 默认对象必须指向不变对象
1 | def enroll(name, gender, age = 6, city = 'beijing'): |
可以按照默认的顺序来提供参数,也可以不按照默认顺序,这时候需要把参数名称写上去。
1 | def enroll(name, gender, age = 6, city = 'beijing'): |
可变参数
可变参数,传入的参数是可变的,可以是0到任意个。
1 | def number_sum(*nums): |
如果已经有一个list或tuple了,传给一个可变参数只需要在list或tuple之前加个*
就可以了。
1 | nums = [1, 2, 3, 6, 7] |
*nums
这种方式表示吧这个list的所有元素作为可变参数传进去。
关键字参数
可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
1 | def person(name, age, **kw): |
上面函数调用也可写为:
1 | print(person('tony', 30, {'city': 'beijing', 'job': 'coder'})) |
命名关键字参数
类似于关键字参数,都可以传递不受限制的参数,但命名关键字参数可以接受限定的参数
1 | def person(name, age, *, city, job): |
在关键字参数dirct里面,只接收city和job两个键的值。命名关键字参数必须传入参数名,如果没有参数名,就报错。
参数组合
在python中,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,可以组合使用,但是,参数定义顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数
1 | def f1(a, b, c=0, *args, **kw): |
通过一个tuple和dict,可以调用任何形式的参数:
1 | 1, 2, 3, 4) args = ( |
返回值
正常的函数的返回值是一个,但是这里要特别说明的是,python中可以返回多个值。
1 | import math |
其实,函数返回的是一个tuple,仍然是一个单一的值,而在语法上,多个变量可以同时接收一个tuple。
1 | a, b = ([1, 2]) |