1.形参变量和实参
形参变量:只有在被调用时才分配内存单元,在调用结束时,即释放所分配的内存单元,因此,形参只在函数内有效,函数调用结束返回主调用函数后则不能再使用该形参变量。
实参:可以是常量,变量,表达式等,无论实参是何种类型的量,在进行函数调用时,它们都必须有稳定的值,因此应预先用赋值,输入等办法使参数获得稳定值。
例:def calc(x,y): res = x*y return res c= calc(a,b) print(c)
此时x和y为形参变量,a和b为实参
2.非固定参数
#元祖形式(*args)
如果参数中出现*,传递的参数就不再是个固定的个体了,传过来的所有参数打包成一个元祖
方法一:
def send_alarm(msg,*users): #带*参数一般都用*args表示 for i in users: print("报警",i)
send_alarm("aaa","alex","gao","hong") #此时的"alex","gao","hong"都传到了*users中
输出为:
报警",alex
报警",gao
报警",hong
#方法二:
send_alarm("aaa",*["alex","gaohui","hong"]) #此时的"alex","gaohui","hong"都传到了*user中
def alarm(msg,*user,age): for i in user: print("aaa",i) alarm("aaa","alex","gaohui","hong",age=22)#当位置参数在带有*参数的后面时,实参必须要用关键参数
#元祖和字典形式
def func(name,*args,**kwargs): print(name,args,kwargs) func("aa",1,2,3,4)#此时1,2,3,4全部属于args元祖里面
打印结果: aa,(1,2,3,4) func("aa",1,2,3,age=23,old="bb")#此时1,2,3属于args元祖里面,age=23,old="bb"属于kwargs字典里面
打印结果: aa,(1,2,3,4){"age"=23,"old"="bb"}
d={"degree":"primary school"} func("aa",d)#此时d这个字典在args元祖里面
打印结果:aa,({"degree":"primary school"},)
func("aa",**d)#此时d这个字典在kwargs字典里面
打印结果:aa,(),{"degree":"primary school"}
3.关键参数
关键参数定义规则:
1.关键参数不能放在位置参数前面
print("aaa",job="python",21)此时位置参数21放在了job="python"关键参数后面,所以会报错
2.关键参数被定义了一个量以后,不能再被定义第二个量
print("aaa",age=23,21)此时关键参数已经给age赋过值,再赋21会报错
正确的方式:def introduct(name,age,job,country="cn"): print("-----introduct-------") print(name,age,country,job) print("aaa",age=23,"job"="salary")
4.默认参数
def introduct(name,age,job,country="cn") print("-----introduct-------") print(name,age,job,country) introduct("gaohui",21,"python") introduct("hongyan",23,"java") introduct("gaohuiaa",23,"it","python1")
此时的country就是默认参数,默认参数必须放在非默认参数后面,当你不想要参数为默认值时,可以再对应的位置写值,此时默认参数的值就会被替换。
总结:
排列顺序:位置参数 关键参数 默认参数