函数 function
可变/不可变类型在传参时的区别
不可变类型参数有
- 数值型(整数,浮点数)
- 布尔值bool
- None 空值
- 字符串str
- 元组tuple
可变类型参数有
- 列表 list
- 字典 dict
- 集合 set
传参说明
- 不可变类型的数据传参时,函数内部不会改变原数据的值
- 可变类型的数据传参时,函数内部可以改变原数据
函数参数
实参传递方式argument
位置传参
实参与形参的位置依次对应
def fun01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 位置实参:根据顺序与形参进行对应
fun01(1, 2, 3)
序列传参
实参用
*
将序列拆解后与形参的位置依次对应
def func01(p1, p2, p3):
print(p1, p2, p3)
# 序列实参:拆,按照顺序与形参对应
list01 = [1, 2, 3]
name = "孙悟空"
tuple01 = (4, 5, 6)
# func01(list01)
func01(*list01) # 拆 1, 2, 3
func01(*name) # 拆 孙 悟 空
func01(*tuple01) # 拆 4, 5, 6
关键字传参
实参根据形参的名字进行对应
def fun01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 关键字实参:根据名字与形参进行对应
fun01(p1=1, p2=2, p3=3)
fun01(p2=2, p1=1, p3=3)
字典关键字传参
实参用
**
将字典拆解后与形参的名字进行对应,配合形参的缺省参数,可以使调用者随意传参
def func01(p1, p2, p3):
print(p1, p2, p3)
# 字典实参:拆,按照名称与形参对应
dict01 = {"p2":"B","p1":"A","p3":"C"}
func01(**dict01)
形参定义方式parameter
缺省形参
"""
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
函数体
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
"""
def func01(p1 =0, p2="", p3=100):
print(p1)
print(p2)
print(p3)
func01(p2=2)
func01(p2=2,p3=3)
# 支持同时使用位置实参与关键字实参
func01(1,p3=3)
# 注意1:先位置实参,后关键字实参
# func01(p1 =1,2,3) # 错误
位置形参
def 函数名(形参名1, 形参名2, ...):
函数体
def func01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
func01(1,2,3)
命名关键字形参
"""
def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
函数体
def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):
函数体
强制实参使用关键字传参
"""
# 命名关键字形参:
# 星号元组形参后面的位置形参
# 限制实参必须是关键字实参
def func01(*args, p1, p2):
print(args)
print(p1)
print(p2)
func01(p1=1, p2=2)
func01(1, 2, 3, p1=1, p2=2)
def func02(p1, *, p2=0):
print(p1)
print(p2)
# 通常星号后面的命名关键字形参属于辅助参数,可选.
func02(1)
func02(1, p2=2)
星号元组形参
"""
def 函数名(*元组形参名):
函数体
可以将多个位置实参合并为一个元组,一般命名为'args',形参列表中最多只能有一个
"""
# 位置实参数量可以无限
def func01(*args):
print(args)
func01() # 空元组
func01(1, 2, 34) # (1, 2, 34)
# 不支持关键字实参
# func01(args = 1,a=1)
双星号字典形参
"""
def 函数名(**字典形参名):
函数体
可以将多个关键字实参合并为一个字典,一般命名为'kwargs',形参列表中最多只能有一个
"""
# 关键字实参数量无限
def func01(**kwargs):
print(kwargs) # {'a': 1, 'b': 2}
func01(a=1,b=2)
# func01(1,2,3) # 报错
参数自左至右的顺序
位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参
def func01(list_target):
print(list_target)# [1,2,3]
def func02(*args):
print(args)# (1,2,3)
def func03(*args,**kwargs):
print(args)# (1,2,3)
print(kwargs)# {a=4,b=5,c=6}
def func04(p1,p2,*,p4,**kwargs):
print(p1)# 10
print(p2)# 20
print(p4)# 30
print(kwargs)# {p5 = 40}
func01([1,2,3])
func02(*[1,2,3])
func03(1,2,3,a=4,b=5,c=6)
func04(10,20,p4 = 30,p5 = 40)
最后一次更新于2022-10-12 10:21
0 条评论