函数的定义和调用
1 | def printInfo(): |
函数的参数
位置参数
1
2
3
4
5
6
7
8
9
10def power(x, n=3): # x和n都是位置参数
s = 1
while n > 0:
s = s * x
n -= 1
return s
print(power(2)) # 2传给x,n使用默认参数3
print(power(2, 1)) # 2传给x,1传给n
print(power(1, 2)) # 1传给x,2传给n不定长参数
使用
*args
定义,传入的是一个元组,可包含任意多个元素1
2
3
4
5
6
7
8
9
10
11def cal(*args):
sum = 0
print(type(args))
for n in args:
sum += n
return sum
print(cal(1, 2, 3))
nums = [1, 2, 3]
print(*nums) # 使用`*`将列表或元组拆成单独的元素,作为不定长参数传入
print(cal(*nums))关键字参数
不定长关键字参数:使用
**kwargs
定义,传入的是一个字典1
2
3
4
5def info(**kwargs):
print(type(kwargs))
print(kwargs)
info(name='Li Lei', age=28)指定关键字参数:用
*
分隔位置参数和关键字参数,位置参数在前1
2
3
4def info(name, age, *, title='Dr.', gender):
print(name, age, title, gender)
info('Li Lei', 28, gender='Male')如果已有不定长参数,后面的关键字参数不需要
*
分隔1
2
3
4
5def info(name, age, *args, title, gender):
print(name, age, args, title, gender)
print(name, age, *args, title, gender)
info('Li Lei', 28, '010-65190389', title='Dr.', gender='Male')
参数定义的顺序
必选位置参数、默认位置参数、不定长位置参数、必选关键字参数、默认关键字参数、不定长关键字参数
函数的返回值
多个return语句
一个函数可以有多个
return
语句,执行到任意一个时,函数的调用就结束了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26def check_return():
print('This is the first return clause.')
return 1
# 以下代码将不会被执行
print('This is the second return clause.')
return 2
print(check_return())
```
* 返回多个值
元组、列表、字典等能够存储多个数据的变量类型都可以用于返回多个数据,默认返回一个元组
```python
def multi_return(a, b, *, type):
if type == 'tuple':
return a, b
if type == 'dict':
return {'a': a, 'b': b}
if type == 'list':
return [a, b]
print(multi_return(1, 2, type='tuple'))
print(multi_return(2, 3, type='dict'))
print(multi_return(3, 4, type='list'))返回一个函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26def sort(method):
# 冒泡算法
if method == 'bubble':
def sort_inner(l):
for i in range(len(l)-1):
for j in range(len(l)-1-i):
if l[j] > l[j+1]:
l[j+1], l[j] = l[j], l[j+1]
return l
# 快速排序算法
if method == 'quick':
def sort_inner(l):
if l == []:
return []
else:
pivot = l[0]
# 使用递归函数,即在函数内部调用函数自身
left = sort_inner([m for m in l[1:] if m < pivot])
right = sort_inner([n for n in l[1:] if n >= pivot])
return left+[pivot]+right
# 返回一个函数时,函数名后面不可加`()`
return sort_inner
my_list = [2, 5, 10, 34, 6, 27, 9]
print(sort('bubble')(my_list))
print(sort('quick')(my_list))