python基础之函数

python函数中参数的定义方式可谓面面俱到,稍不留神就会把定义和调用弄混。

函数参数

必选参数(位置参数)

默认参数

1
2
3
// 默认参数最好用不可变对象
def enroll(name, age=5, city='hangzhou'):
print(name, age, city)

可变参数

1
2
3
4
5
6
7
8
9
10
11
12
// 内部接收到一个tuple
def calc(*number):
sum = 0
for n in number:
sum = sum + n*n
return sum
calc(1,2,3,4)
// 若定义了可变参数的函数,想传list或者tuple
n = [1,2,3,4]
calc(*n)

关键字参数

1
2
3
4
5
6
7
8
9
// 内部接收到一个dict
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
person('kc', 10, city='xian', gender='x', hobbit='pingpong')
// name:kc age:10 other:{'city':'xian','gender':'x','hobbit':'pingpong'}
// 同理,若直接传入dict
extra = {'city':'xian','gender':'x','hobbit':'pingpong'}
perseon('kc', 10, **extra)

命名关键字参数

1
2
3
4
5
6
7
8
9
10
11
// *参数后面的为命名关键字参数
def person(name, age, *, city, gender):
print(name, age, city, gender)
person('kc', 10, city='beijing', gender='x')
// 可变参数后面跟的参数也是命名关键字参数
def person(name, age, *args, city, gender):
print(name, age, args, city, gender)
// 命名关键字参数可以有默认值,定义时候加了默认值,调用的时候就无需传入
def person(name, age, *, city='Beijing', gender):
print(name, age, city, gender)
person('kc', 10, gender='x')

参数组合

参数组合顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数
python中任意函数调用形式统一是通过func(*args, **kw)调用的,无论参数怎样定义。