1.python中的函数
def+函数名+小括号+冒号
缩进+函数体
函数名+小括号
def func(): print(a) func()
2.定义和引用函数
def func(a_addr,a_age,d_addr,d_age): #定义函数 print(f"我在{a_addr},今年{a_age}岁") print(f"猪蹄在{d_addr},今年u{d_age}岁") func("北京","18","上海","17") #调用参数 结果: 我在北京,今年18岁 猪蹄在上海,今年17岁
3.函数的执行流程
从定义位置开始执行,再执行同一竖直水平下的调用函数func(),之后再执行函数体,遇到return时结束函数体
4.函数的返回值return
return 将返回值返回给调用者(函数名+括号就是调用者)
不写return时,默认返回值是None,
当有retrun时,没有写值是默认返回值是None
return可以返回任何数据 多个元素返回的是元祖
当有return时,写值后返回值是所写的值
当函数体执行到return后会停止执行,将返回值返给调用函数(终止这个函数)
5.函数的参数
形参:
位置参数
默认参数
混合参数
实参:
位置参数
关键字参数
混合参数
参数位置: 位置参数 > 默认(关键字)参数
传参:就是从形参到实参的过程
6.动态参数
def func(*args): #*args进行聚合,打包 print(args) func('包子','油条','豆浆')
结果:
('包子', '油条', '豆浆') # *args的结果以元祖的形式出来
*args的作用是接受所有的位置的参数 获取到的结果以元祖的形式表现出来
def func(a,s,*args): #位置参数 > 动态位置参数 print(a,s,args) func('包子','油条','豆浆','猪蹄','羊蹄') 结果: 包子 油条 ('豆浆', '猪蹄', '羊蹄')
位置参数 > 动态位置参数 *args获取的结果以元祖的形式打印出来
def func(a,b,**kwargs): print(a,b,kwargs) func(a='猪蹄',b= '羊蹄',c='鸡腿',d='鸭腿') #关键字位置 > 动态关键字位置 结果: 猪蹄 羊蹄 {'c': '鸡腿', 'd': '鸭腿'} #**kwargs接收的关键字参数通过字典打印出来
关键字参数 > 动态关键字参数 **kwargs接收的关键字参数通过字典的形式打印出来
动态参数接收位置参数:
注意点:
*args接收的位置参数按照元祖的形式打印,当只有一个参数的时候必须要带个逗号(1,)
*args中的args并不是固定的 可以换成其他变量但是*是固定的
动态参数接收参数的时候,位置参数必须在动态参数前面(a,b,*args)
默认参数写在动态参数后面的时候,默认参数不会生效
动态参数接收关键字参数:
注意点:
**kwargs接收的关键字参数以字典的形式打印来
**kwargs中的kwargs并不是固定的 可以换成其他变量但是*是固定的
动态参数接收关键字参数也必须是在位置参数的后面
def func(a,b,*args,c= 1,d= 2,**kwargs): #位置参数 >动态位置参数 >关键字参数>动态关键字参数 print(a,b,args,c,d,kwargs) func('猪蹄','羊蹄',"鸡腿",'鸭腿',c= 66,d= 77,f= 88,g= 99) 结果: 猪蹄 羊蹄 ('鸡腿', '鸭腿') 66 77 {'f': 88, 'g': 99} # *args 接收的位置参数以元祖的形式呈现, #**kwargs 接受的关键字参数以字典的形式呈现
def func(*args,**kwargs): #万能 无敌 print(args,kwargs) func(1,2,3,4,a=1,b=2,c=3) # 位置 关键字 混合 结果: (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
lst =[1,2,3,5,4] def func(*args): # 聚合 print(*args) #打散 func(*lst) # 打散 去壳 结果: 1 2 3 5 4
# 形参位置:
# 位置参数 > *args(动态位置参数) > 默认参数 > **kwargs
*和**在形参位置代表着聚合,在实参位置的时候代表着打散,
*在函数体重代表着打散
*kwargs在函数体中代表打散的是字典的键 **kwargs在函数体中会报错