""" 形参和实参: 形参:定义 函数时的 参数变量 实参:调用 函数时,使用的参数变量 参数传递的过程,就是 把实参的引用 传递给 形参 ,使用实参的值来执行函数体的过程。 在 Python 中,函数的实参/返回值都是是靠引用来传递来的 """ def location(a=0, b=0): """ 按照参数位置,依次传递参数,这是最普通的方式 """ print(a + b) location(3, 9) # 位置实参,即调用函数时,按顺序传递参数,3 传给 a,9 传给 b;得到正确结果12 location(b=3, a=9) # 关键字实参,即调用函数时,按关键字传递参数,3 传给 b,9 传给 a;一旦第一个实参使用了关键字实参,那么后面的实参都须使用关键字实参;得到正确结果12 location(*(3, 9)) # 元组封包实参,需要在实参前加一个*号,表示对元组拆包后,按位置传给形参;得到正确结果12 location(**{'a': 3, 'b': 9}) # 字典封包实参,需要在实参前加两个*号(拆包两次),表示对字典拆包后,按键值与形参名一一对应传给形参;得到正确结果12 location(*{'a': 3, 'b': 9}) # 字典封包实参,因为只使用了一个*号,只拆包了一次,得到'a'和‘b’,'a'+‘b’返回的结果是'ab' # 以上采用了实参拆包传递给形参的方式 def person(userid, name, age, sex='男', *args, **kwargs): print(f''' 身份证:{userid} 姓名:{name} 年纪:{age} 性别:{sex} 不定长参数信息:{args} 字典参数信息:{kwargs} ''') person('320102', '张三', 24, '男', 'txt1.txt', 'txt2.txt', 'txt3.txt', 班级='2101班', 爱好='唱歌') ''' 以上采用了封包接收实参的方式,实参被*args和**kwargs各自收入了元组和字典中 得到: 身份证:320102 姓名:张三 年纪:24 性别:男 不定长参数信息:('txt1.txt', 'txt2.txt', 'txt3.txt') 字典参数信息:{'班级': '2101班', '爱好': '唱歌'} ''' # person('320102', '张三', 24, sex='男', 'txt1.txt', 'txt2.txt', 'txt3.txt', 班级='2101班', 爱好='唱歌') 这种调用出错,当有一个采用了关键字传实参时,其后面都必须得是关键字传实参数的方式,否则报错。