函数的定义
函数将一段实现功能的完整代码,用函数名进行封装,通过函数名对函数进行调用,达到一次编写,多次调用的目的。可以实现代码的重用性。
Python中用def关键字定义函数:
1 | def 函数名称(参数列表): |
函数的参数
- 形式参数:函数定义处的参数
- 实际参数:函数调用处的参数
1 | def func(num): #num是形参 |
参数的传递有三种方式,分别是位置参数、关键字参数和默认值参数
位置参数:调用时,参数的个数和顺序必须与定义的参数个数和顺序相同
1
2
3
4def func(name, age):
print('name:{0}, age:{1}'.format(name, age))
func('Tom', 22)关键字参数:调用时,用“形参名称=值”的方式进行传参,传递顺序可以与定义时参数的顺序不同
1
2func(name='Tom', age=22)
func(name='Tom', 22) #位置参数在关键字参数之后会报错默认值参数:在函数定义的时候,直接对形参进行赋值,若调用时该参数不传值,将使用默认值
1
2
3
4
5
6
7def func(name='Tom', age=22):
print('name:{0}, age:{1}'.format(name, age))
func() #name、age都使用默认值
func('Daming') #age使用默认值
func('Daming', 23) #使用位置传参
func(age=23) #使用关键字传参函数定义时,同时存在位置参数和默认值参数时,默认值参数放后
有一类参数是可变参数:
个数可变的位置参数:函数调用时可接受任意个数的实际参数,并放到一个元组中。
如果调用时,实参为列表,在实参前加一个*,会将列表进行解包,如例子3所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25def func(*para):
print(type(para))
for item in para:
print(item)
func(1, 2, 3)
'''
<class 'tuple'>
1
2
3
'''
func([1, 2, 3])
'''
<class 'tuple'>
[1, 2, 3]
'''
#调用时参数前加一个*,会将列表进行解包
func(*[1, 2, 3])
'''
<class 'tuple'>
1
2
3
'''个数可变的关键字参数:函数调用时可接受任意个数“参数=值”形式的参数,并放到一个字典中。
如果想要直接传入一个字典,需要在字典类型的实参前加**,如例子3所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22def func(**para):
print(type(para))
for key, value in para.items():
print(key, '--->', value)
func(name='Tom', age=22, score=99)
'''
<class 'dict'>
name ---> Tom
age ---> 22
score ---> 99
'''
d = {'name': 'Tom', 'age': 22, 'score': 99}
# func(d) # TypeError: func() takes 0 positional arguments but 1 was given
func(**d)
'''
<class 'dict'>
name ---> Tom
age ---> 22
score ---> 99
'''