函数入门
前面几个章节学习了python中的一些内置函数,例如:sum()、print()、input()、max()、len()、type()等,这些都被称作内置函数(即被开发者定义好的函数)。
函数的作用:函数是具有特定功能的代码块,可重复使用,提高代码使用率。
除了内置函数之外,我们还可以自定义函数,以此来提高代码的可读性,提高代码利用率。
其中定义函数的具体格式如下:
def 函数名(参数名字):
函数体
例如:
def qu_chong():
l1=[12,3,5,64,12,5,12,12,54]
for i in l1[:]:
if l1.count(i)>1:
l1.remove(i)
print(l1)
qu_chong()
输出结果:[3, 64, 5, 12, 54]
但如果该代码没有最后一行'qu_chong()',运行改代码是没有输出结果的,因为函数只是被定义了,只有被调用出来的时候,才会被执行。
参数:形参和实参
形参:定义函数阶段的参数叫形式参数,简称形参。
1.必备参数
def func(x,y)
pass
这里的x和y就是形参,并且数据形参中的必备参数。 例如:
def func(a,b):
print(f'{a}和{b}的值是:{a+b}')
2.默认参数
例如:当我们计算人年龄的时候=当下的年份-出生的年份,而当下的年份是固定的,这就可以使用默认参数。
def age(a,b=2023):
print(f'您的年龄是{b-a}岁')
age(2000) #A
age(2000,2050) #B
输出:
这里需要注意的是A是没有赋值'b'的,所以这里默认用了定义函数中的'b=2023';而B除了把'a'赋值成了2000,把'B'也赋值成了2500,所以这里的定义函数中的'b=2023'是不起作用的。
con: 默认函数是可传递可不传递的,当实参传递了值就用传递值,如果实参没有传递值,那就用默认值。
不定长参数
不定长参数分为有:*args和**kwargs
*args
只接收任意个位置参数,并把接收到数据保存成一个元组
**kwargs
只接收任意个关键字参数,并将收到的关键字参数保存成一个字典
实参包含位置参数、关键字参数,如果位置参数和关键字参数同时出现,位置参数必须放在关键字参数前面。
位置参数:200
关键字参数:x=200
def qiu_he(a1,*args,**kwargs):
print(a1)
print(args)
print(kwargs)
#实参 位置参数 关键字参数
name='Lily'
qiu_he(24,25,23,name,a=4,kwargs=5)
输出结果:
从结果中可以看出:a1接收到的值是必备参数24,args接收到的是(25, 23, 'Lily'),kwargs接收到的是关键字参数{'a': 4, 'kwargs': 5}
注意:
qiu_he(a=4,24,25,23,name,kwargs=5)
但这种方式就会报错,原因是:
形参的参数顺序:必备参数,默认参数,不定长参数
实参的参数顺序:位置参数,关键字参数
def qiu_he(a1,b1=20,*args,**kwargs):
print(a1)
print(b1)
print(args)
print(kwargs)
#实参 位置参数 关键字参数
name='Lily'
qiu_he(24,25,23,name,a=4,kwargs=5)
输出结果:
从以上结果又可以看出,虽然我们定义了一个默认参数'b1=20',但在同一个定义函数中,我们又使用了必备参数和不定长参数,所以当必备参数,默认参数,不定长参数一起使用的使用,默认参数是不起作用的。
con:
形参:写在定义函数括号里面
- 必备参数,例如:r1,name
- 默认参数,例如:a=34
- 不定长参数,*args(位置参数),**kwargs(关键字参数)
实参:写在调用函数括号里
- 位置参数,例如:34,12,'hello'
- 关键字参数,例如:a=3,m=10,其中参数必须和必备参数里面的参数一一对应
案例:当我们利用定义函数,就可以实现以下内容达到反复去重的目的
def qu_chong(*args):
l1=list(args)
for i in l1[:]:
if l1.count(i)>1:
l1.remove(i)
print('去重的结果是:',l1)
l1=[12,3,5,64,12,5,12,12,54]
qu_chong(*l1)
qu_chong(34,54,64,34,22,15,12,34)
输出结果: