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

可变参数

参数个数可变,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)

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

参数组合

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

相关推荐
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页