python 可变参数 关键字参数 命名关键字参数

本文详细介绍了Python中的可变参数、关键字参数和命名关键字参数的使用,包括它们如何允许传入不同数量的参数,并且演示了如何在函数调用中组合使用这些参数类型。

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

可变参数

参数个数可变,1个2个任意个,或0个。

默认参数调用:
def calc(numbers):
    sum=0
    for n in numbers:
        sum=sum+n*n
    return sum
需要先组装出一个list或tuple
calc([1,2,3])
输出:
14
可变参数调用:
def calc(*numbers):
    sum=0
    for n in numbers:
        sum=sum+n*n
    return sum
简化调用:
calc(1,2,3)
输出:14

 如果已经有一个list 或tuple, 调用一个可变参数:

nums=[1,2,3]
calc(*nums)

*nums表示把nums这个list的所有元素作为可变参数传进去。

关键字参数 

可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict(键-值)。

def person(name ,age ,**kw):
    print('name:',name,'age:',age,'other:',kw)

函数person中除了必选参数name和age以外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数

person('Danny',30)
输出:
name:Danny age:30 other:{}

也可以传入任意个数的关键字参数:

person('Ada',45,gender='M',job=Engineer')
输出:
name:Ada age:45 other:{'gender':'M','job':'Engineer'}

关键字参数的作用:扩展函数。

比如在person中,可以接收 name 和 age 两个参数,但若有更多参数,也能接收到。

和可变参数类似,可以先组装出一个dict,然后把这个dict转换为关键字参数传进去:

extra={'city':'Beijing','job':'Engineer'}
person('Jack',24,city=extra['city'],job=extra['job'])
输出:
name:Jack age:24 other:{'city]:'Beijing','job':'Engineer'}

简化写法:
extra={'city':'Beijing','job':'Engineer'}
person('Jack',24,**extra)
输出:
name:Jack age:24 other:{'city':'Beijing','job':'Engineer'}

**extra表示把 extra 这个 dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,但对kw的改动不会影响到函数外的extra。

命名关键字参数

关键字参数,函数的调用者可以传入任意不受限制的关键字参数。传入的参数需要在内部通过kw检查。

如在person()函数中,检查是否有city和job参数:

def person(name,age,**kw):
    if 'city' in kw:
        pass
    if 'job' in kw:
        pass
    print('name:',name,'age:',age,'other:',kw)

仍可以传入不受限制的关键字参数:

person('Jack',24,city='Beijing',addr='Chaoyang',zipcode=123456)

若要限制关键字参数的名字,就用命名关键字参数,如只接收 city 和 job 作为关键字参数:

def person(name,age,*,city,job):
    print(name,age,city,job)

和关键字参数*kw不同的是,命名关键字参数需要一个特殊分隔符‘ * ’ , ‘ * ’后面的参数被视为命名关键字参数:

person('Jack',24,city='Beijing',job='Engineer')
输出:
Jack 24 Beijing Engineer

若函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不需要特殊分隔符 ' * '了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

命名关键字参数必须传入参数名。而位置参数可不用。

参数组合

参数定义顺序:必选参数、默认参数、可变参数、命名关键字参数、关键字参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值