函数的参数

位置参数

  • 传入参数的值是按照顺序依次复制过去的

#创建一个带有位置参数的函数,返回一个字典
def menu(name, age, pro):
    return {'name': name, 'age': age, 'pro': pro}menu('jobs', '55', 'CEO')
{'age': '55', 'name': 'jobs', 'pro': 'CEO'}

关键字参数

  • 调用参数时指定对应参数的名字,可以采用与函数定义不同的顺序调用

  • 关键字参数和位置参数可以混用

  • 混用时先考虑位置参数

#关键字参数 
menu(pro='CEO', age='55', name='jobs')
{'age': '55', 'name': 'jobs', 'pro': 'CEO'}
#混用
menu('jobs',  pro='ceo', age='55',)
{'age': '55', 'name': 'jobs', 'pro': 'ceo'}

默认参数

  • 定义函数时可以给参数设置默认值,当调用方没提供参数值时使用默认值

#定义函数给pro设置默认值
def man1(name, age, pro='CEO'):
    return {'name':name, 'age':age, 'pro':pro}
#调用时给参数提供值
man1(name='jobs', age='55', pro='CTO')
{'age': '55', 'name': 'jobs', 'pro': 'CTO'}
#调用时不给参数提供值
man1('jobs', '55')
{'age': '55', 'name': 'jobs', 'pro': 'CEO'}

使用*收集位置参数

  • 当参数被用在函数内部时, 星号将一组可变数量的位置参数集合成参数值的元组

  • 函数同时指定了位置参数和args,args会收集剩下的参数

#args是传入到函数 print_args() 的参数值的元组
def print_args(*args):
        #使用参数的时候不带*会以元组输出
    print('Positional argument tuple:', args)
#无参数调用
print_args()
Positional argument tuple: ()
#传入参数调用,参数已元组形式输出
print_args(3, 2, 1, 'wait!', 'hello')
Positional argument tuple: (3, 2, 1, 'wait!', 'hello')
#函数同时指定了位置参数和*argsdef 
print_args1(name, age, *args):
    print(name)
    print(age)
    #使用args带*则不需要以元组输出
    print(*args)#调用print_args1('jobs', '55', 'CEO', 'apple')
jobs
55
CEO apple

使用**收集关键字参数

  • 使用两个星号可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字典的值

#打印输出关键字参数
def print_kwargs(**kwargs):
    print('Keyword arguments:', kwargs)
#使用关键字参数调用函数
print_kwargs(name='jobs', age='55', pro='CEO')
Keyword arguments: {'age': '55', 'pro': 'CEO', 'name': 'jobs'}
#混用
m = 5l = ['a', 'b', 'c']d = {'a':'1', 'b':'2', 'c':'3'}def print_1(m, *args, **kwargs):
    print(m)
    print(args)
    print(kwargs)
#调用
print_1(m,*l,**d)
5
('a', 'b', 'c')
{'b': '2', 'c': '3', 'a': '1'}