python-函数、参数及参数解构

本文介绍了Python函数中的参数类型,包括位置参数、关键字参数、带默认值的参数、可变位置参数和关键字参数、keyword-only参数以及参数解构。位置参数按顺序传递,关键字参数允许不按顺序指定。函数参数可以有默认值,用于未传入实参时赋值。可变参数允许接收多个位置或关键字参数,解构则用于将集合类型拆解为函数参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数规则:参数列表一般顺序是,普通参数、缺省参数、可变位置参数、keyword-only参数、可变关键字参数

位置参数

  • 按照参数定义传入实参
  • def f(x,y,z)调用时使用f(1,2,3)
  • 按照参数的定义来传入实参
  • 当传入实参数量比形参数量多时,报错

关键字参数

  • 使用形参的名字来传入实参,传参顺序可与定义顺序不同
  • def f(x,y,z)调用时使用f(x=1,y=2,z=3)
    位置参数必须在关键字参数前传入
def f(x,y,z):
    print('a')

f(1,2,3)
f(x=1,y=2,z=3)
f(1,y=2,z=3)
f(x=1,2,3)#该方式报错,位置参数应在关键字参数之前

函数参数默认值

  • 定义时在形参后跟一个默认值
  • 参数的默认值可在未传入足够实参时,对未给定的参数赋予默认值
def add(a=4,b=5):
    m = a+b
    print('m:',m)
    return m

add(2)
'''#输出
7
'''

可变参数

位置参数的可变参数
  • 形参前使用*表示,表示可以接收多个实参
  • 收集多个实参为一个tuple
def sum(*nums):
    sum = 0
    for i in nums:
        sum += i
    print(sum)
    return sum
'''#输出
24
'''
关键字参数的可变参数
  • 形参前使用**表示,表示可以接收多个关键字参数
  • 收集的实参名称和值组成一个字典
def showconfig(**kwargs):
    for k,v in kwargs.items():
        print('{}:{}'.format(k,v))
#调用
showconfig(host='127.0.0.1',port='8080',user='admin')

'''#输出
host:127.0.0.1
port:8080
user:admin
'''
可变参数的混合使用
  • 可变参数要放在参数列表最后
  • 普通参数要放到参数列表前面
  • 位置可变参数需要在关键字可变参数之前
'''
实例一:仅包含位置参数和关键字可变参数,调用时位置参数需一一对应,且不可多或少
'''
def showconfig(username,password,**kwargs):
    for k,v in kwargs.items():
        print('{}:{}'.format(k,v))
        
#调用
showconfig('admin','aa')#调用时,位置可变参数可不传
showconfig('admin','aa',host='127.0.0.1')
showconfig('admin',host='127.0.0.1')#缺少一个位置参数,运行报错
'''
实例二:位置参数、位置可变参数、关键字可变参数,进行传参时,位置参数必须对应,关键字可变参数、位置可变参数可不穿
'''
def showconfig(username,*args,**kwargs):
	for k,v in kwargs.items():
         print('{}:{}'.format(k,v))

#调用
showconfig('admin',host='127.0.0.1')#args为空
showconfig('admin','aa','bb',host='127.0.0.1')
showconfig(username='admin',host='127.0.0.1')
showconfig(username='admin')#args、kwargs均为空
showconfig(host='127.0.0.1')#报错,位置参数必传
'''
位置可变参数在关键字可变参数后不支持,报错
'''
def showconfig(username,password,**kwargs,*args):
	for k,v in kwargs.items():
         print('{}:{}'.format(k,v))

keyword-only参数

  • 在一个星号参数或在一个位置可变参数后出现的普通参数
  • keyword-only参数在进行传参时,必须带关键字
  • 不支持在位置可变方式后def fn(**kwargs,x)
def fn(*args,x):
    print(x)
    print(args)

#调用
fn(3,5,x=7)
fn(3,5)#未指定关键字,报错
fn(3,5,7)#未指定关键字,报错

参数解构

  • 给函数提供实参时,可以在集合类型前使用*或 ** ,把集合类型的元素解开,提取出所有元素作为参数的实参
  • 非字典类型使用*解构成位置参数
  • 字典类型使用**解构成关键字参数
  • 提取出来的元素数目要和参数要求匹配,参数类型也要匹配
  • 可解构的数据解构有list、tuple、set、dict、可迭代对象
#函数定义
def add(x,y):
    return x+y

#函数调用
add(*[1,5])
add(*(1,5))
add(*{1,5})
add(**{'x':1,'y':2})
add(**{'a':1,'b':2})#报错,解构出的关键字不对应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值