真的是不想写啊,虽然脑袋里都知道 但是就是不想动手啊,痛苦啊~~~~
正题:
位置参数:比如你去电影院看电影,根据票号,找到自己的位置,都是一一对应的关系
形参:变量只有在被调用时才分配内存单元,一旦调用结束,该分配的内存单元将被释放回收,并且形参只有在该定义的函数内部有效,只要不在该函数中,则无效,不可使用
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def parm(x,y):
'''输出x,y值'''
print("x的值为%s,y的值为%s" %(x,y))
parm(3,4)
#这里x,y就是形参,3,4就是实参
默认参数:可以理解成初始值
def parm(x,y,z=1):
'''输出x,y,z值'''
print("x的值为%s,y的值为%s,z的值为%s" %(x,y,z))
parm(3,4)
#输出结果为:x的值为3,y的值为4,z的值为1
parm(3,4,5)
#输出结果为:x的值为3,y的值为4,z的值为5
备注:默认参数的位置一定要在最后,比如def parm(x,z=1,y)这样不对:报错:SyntaxError: non-default argument follows default argument,后面会说到位置参数,就会明白了
关键参数:上面说的都要应该的按照位置传对应的实参,讲究顺序,此方式为 key-value方式,不讲究位置对应顺序
def parm(x,y,z):
'''输出x,y,z值'''
print("x的值为%s,y的值为%s,z的值为%s" %(x,y,z))
parm(z=1,y=3,x=4)
#输出结果为:x的值为4,y的值为3,z的值为1
关键参数+位置参数:关键参数必须放在位置参数之后
def parm(x,y,z):
'''输出x,y,z值'''
print("x的值为%s,y的值为%s,z的值为%s" %(x,y,z))
parm(z=1,y=3,5)
#输出结果为:x的值为4,y的值为3,z的值为1
备注:报错:SyntaxError: positional argument follows keyword argument,上面这种方式,执行时会认为,z=1,y=3,z=5,因为5在z对应的形参位置上,所以也会把5传给z,这样就不行了, 所以位置参数一定要放在最前面
非固定参数:用在不确定要输入多少参数时,主要有*args 和**kwargs
*args :会将接受到的多个参数变成一个元组的形式,传入时,只需要输入value的格式就可以
*kwargs :会把接受到的多个参数变成一个dict形式,传入时,需要用key-value的方式传入
def parm(x,y,*args,**kwargs):
'''输出x,y,*args,**kwargs值'''
print('x的值为:',x)
print('y的值为:',y)
print('*args的值为:',args)
print('**kwargs的值为:',kwargs)
parm(1,2,'args1','args2','args3',parm1=11,parm12=22,parm3=33)
#输出结果为:
'''
x的值为: 1
y的值为: 2
*args的值为: ('args1', 'args2', 'args3')
**kwargs的值为: {'parm1': 11, 'parm12': 22, 'parm3': 33}
'''
备注:突然想到把*args放在**kwargs后面行不行,来试试~。。。。报错了~~
函数作为参数:函数本质就是变量,既然是变量就可以作为参数,即函数作为另外一个函数的参数
(1)
def par_b():
'''输出返回值'''
print("par_b函数返回值")
def functest(x,func,*args):
'''输出func,*args值'''
func()
print(args)
print(func)
functest(1,par_b,'args1','args2')
'''
par_b函数返回值
('args1', 'args2')
<function par_b at 0x00000269CF64C268>
'''
#备注:par_b作为参数传入,此时par_b为无参数的函数,如果有参数该怎么操作?
(2)
先看源代码:
def par_b(a):
'''打印传入的参数值a '''
print("par_b函数返回值",a)
def functest(x,y,func,*args):
'''传入的x参数值作为变量函数func的参数'''
print("x的值为:",x)
func(x)
functest(1,2,par_b,'args1','args2')
'''
x的值为: 1
par_b函数返回值 1
'''
备注:是不是感觉很棒,其实还是那句话,函数即变量~~~