函数的基本使用
函数的含义:
函数是执行特定任务的独立代码块,函数可以接受参数,并返回值,帮助我们简化代码,并在不同地方复用相同的功能。
特点:可读性强,可复用性强
函数的定义与调用
定义:
使用def关键字定义一个函数
def 函数名(参数1,参数2):函数体return返回值
调用语法
函数名(参数) # 方式一:调用函数,不接受返回值 返回值 = 函数名(参数) # 方式二:接收函数的返回值,赋值给一个变量
函数的参数,分为形参与实参
形参与实参:形参是在定义函数时,用来指定函数可以接收的参数名称;实参是在调用函数时,传递给函数的真实值。实参是传递给形参的具体数据。
形参:
位置参数
def func(a, b):print(a + b)
默认参数
def func(a, b=1): # b为默认参数,默认值为1print(a + b)# 将1赋值给a,b使用默认值,默认值为1。则输出结果为:2 func(1) # 默认参数可以不传# 将1复制给a,b赋值为3,不使用默认值。输出结果为:4 func(1, 3)
可变参数:*args
args,只是一个变量名,可以自定义,但是一般都使用args(约定俗成)
def func(*args): # args实际为一个元组,传入的每一个参数为元组中一个元素print(args)func(1) # 可以传1个值 func(1, 2, 3, 4) # 也可以传多个值
可变参数:**kwargs
kwargs,只是一个变量名,可以自定义,但是一般都使用kwargs(约定俗成)
def func(**kwargs): # kwargs实际为一个字典,接收到的参数存储为键值对print(kwargs)func(name='mingbo', age=18) # 往kwargs这个字典中传入两个键值对# 输出: {'name': 'mingbo', 'age': 18}
定义形参的顺序
位置参数--->*args--->默认参数-->**kwargs
def func(name, *args, age=18, **kwargs):print(name)print(args)print(age)print(kwargs)# mingbo赋值给name # (1,2,3)赋值给args # 19赋值给age # {sex:男}赋值给kwargs func('mingbo', 1, 2, 3, age=19, sex='男')# 输出: 邵明博 (1, 2, 3) 19 {'sex': '男'}
实参
按照位置传参
def func(a, b):print(a, b)func(1, 2) # 按照位置传参,将1传给a,2传给b# 输出: 1 2
按照关键字传参
def func(a, b):print(a, b)func(a=1, b=2) # 按照关键字传参# 输出: 1 2
传参的注意点:位置参数必须在关键字传参之前。
def func(a, b):print(a, b)func(1, b=2) # 位置传参与关键字传参混合使用# 输出: 1 2
*args和**kwargs可以使用星号*和**传入一个List、字典。
def func1(*args):print(args)li = [1, 2, 3, 4] func1(*li) # 将li这个列表中的元素,分别传入到args中 # 输出:(1, 2, 3, 4)def func2(**kwargs):print(kwargs)dic = {'name': 'mingbo', 'age': 18} func2(**dic) # 将dic这个字典中的键值对,分别传入到kwargs中 # 输出:{'name': 'mingbo', 'age': 18}
函数的返回值
1.没有返回值(不写return)
不写return
def func():passprint(func()) # 不写return,默认返回None# 输出: None
只写return
def func():return print(func()) # 只写return,默认也返回None# 输出: None
return None
def func():return Noneprint(func()) # 返回None# 输出: None
2.返回1个值
结束函数,并返回一个值
def func(a, b):return a + bret = func(1, 2) # 接收返回值,存储到变量ret中 print(ret)# 输出: 3
3..返回多个值:多个值之间使用英文逗号隔开,实际返回的是一个元组,每个返回值为其中的一个元素。
用1个变量接收
def func(a, b):return a, b # 实际返回的是一个元组(a, b),每个返回值为其中一个元组 ret = func(1, 2) # 使用1个参数接收返回值 print(ret) # 输出为元组类型的(1, 2)#输出: (1, 2)
用等量的多个变量接收
def func(a, b):return a, b a, b = func(1, 2) # 使用变量a和b,分别接收1和2 print(a, b) # 输出a和b# 输出: 1 2
注意点
1.先定义后调用
2.只定义不调用,就一定不会执行
3.默认参数的陷阱:如果默认参数的值是一个可变教据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源
def func(li=[]):li.append(1)print(li)func() # 输出:[1] func() # 输出:[1, 1] func([]) # 输出:[1] func() # 输出:[1, 1, 1]