函数的参数

一、默认参数:默认参数是指带有默认值的参数,在对该函数进行调用时,可以不必显示传递给该函数。当不传递值的时候,函数将使用默认值。默认参数后面必须也是默认参数。
注意:默认值只能会执行一次这条规则,在默认值为可变对象(列表,字典等)时非常重要。官方建议默认参数尽量使用不可变对象,因为可变对象会存储在后续调用中传递给它的参数。如:

1
2
3
def abc(a,b=[]):
  b.append(a)
  print(b)

连续调用三次的结果是:
abc(100) 结果:[100]
abc(200) 结果:[100,200]
abc(300) 结果:[100,200,300]

可以改以下方式:

1
2
3
4
5
def abc(a,b=None):
  if b is None:
    b = []
    b.append(a)
print(b)

连续调用三次的结果是:
abc(100) 结果:[100]
abc(200) 结果:[200]
abc(300) 结果:[300]、

二、关键字参数:函数调用时指定参数名称,称关键字参数。调用时关键字函数必须在普通参数后面。如:
def abc(x,a=100,b=200)
调用时:
abc(10,a=300,b=400)

注意:两者的区别是:默认参数是在函数创建时,关键字函数是在函数调用时。

三、限定关键字形参(命名关键字参数):必须使用关键字方式传递参数,目的就是为了限制后面几个参数只能按关键字传递,这往往是因为后面几个形参名具有十分明显的含义,显式写出有利于可读性;或者后面几个形参随着版本更迭很可能发生变化,强制关键字形式有利于保证跨版本兼容性。

1
2
def abc(a,*,b,c):
  print(a,b,c)

这里的*号是占位符,表示*号后面的参数必须是关键字参数,调用如下:
abc(100,b=200,c=300)

四、可变参数:当参数的数量不固定或比较灵活时可以用可变参数。以*+参数名的形式,一般都用*args,会返回一个tuple对象;以**+参数的形式,一般都用**kwargs,会返回一个dict对象:

1
2
3
def abc(a,b,*args):
  print(a,b,args)
abc(100,200,300,400,500,600)

返回结果:
100 200 (300, 400, 500, 600)

1
2
3
def abc(a,b,**kwargs):
  print(a,b,kwargs)
abc(100,200,x=100,y=200,z=300)

返回结果:
100 200 {'x': 100, 'y': 200, 'z': 300}

五、参数的解包:如果参数的数据类型是:字符串,列表,元组,字典,集合的时候,可以解包传递实参时,可以在实参前添加*号,这样会自将序列中的元素依次作为参数传递。需要注意的是,实参解包后对应的元素数量必须和形参数量一致,不然程序会报错。
1、字符串、列表、元组、集合解包:

1
2
3
4
5
6
7
8
9
10
def abc(a,b,c):
  print(a,b,c)
s = '123'
l = [1,2,3]
t = (1,2,3)
s1 = {1,2,3}
abc(*s)
abc(*l)
abc(*t)
abc(*s1)

返回结果都是:
1 2 3

2、字典解包:

1
2
3
4
5
6
7
8
def abc(a,b,c):
  print(a,b,c)
d = {
'名字':'Donfag',
'年龄':20,
'工作':'Python'
}
abc(*d)

返回结果:
名字 年龄 工作
注意:这里获取到的值是字典的KEY,如果要获取字典的VALUE,可以用两个星号(**),但这里需要注意的是,用两个*号时,字典的键名和函数的形参名必须要一致(顺序和命名):

1
2
3
4
5
6
7
8
def abc(a,b,c):
    print(a,b,c)
    d = {
        'a':'Donfag',
        'b':20,
        'c':'Python'
    }
abc(**d)   

  

返回结果:
a b c

posted @   donfag  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示