Python:函数入门

131 阅读4分钟

函数入门

前面几个章节学习了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

输出:

image.png

这里需要注意的是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)

输出结果:

image.png

从结果中可以看出: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)

输出结果:

image.png

从以上结果又可以看出,虽然我们定义了一个默认参数'b1=20',但在同一个定义函数中,我们又使用了必备参数和不定长参数,所以当必备参数,默认参数,不定长参数一起使用的使用,默认参数是不起作用的。

con:

形参:写在定义函数括号里面

  1. 必备参数,例如:r1,name
  2. 默认参数,例如:a=34
  3. 不定长参数,*args(位置参数),**kwargs(关键字参数)

实参:写在调用函数括号里

  1. 位置参数,例如:34,12,'hello'
  2. 关键字参数,例如: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)

输出结果:

image.png