lg04551

导航

 

1、形参:定义函数时括号内的参数,其实就是变量名

     实参:调用函数时,括号内的传入值,其实就是变量值

注意:实参与形参的绑定关系只在调用时才会生效,在函数调用结束后立即解除

2、位置参数:

位置即顺序,按照从左往右的顺序定义。

在定义函数时按位置定义形参,称为位置形参

调用函数必须为其传值,多一个不行,少一个也不行

调用函数时,按位置定义实参,称为位置实参

实参与形参必须一一对应

def foo(x,y,z):
print(x,y,z)
foo(1,2,3)
foo(1,z=3,y=2)
foo(x=1,y=3,z=5)

关键字参数
在调用函数时,按照key=value形式定义

相当于指名道姓为形参传值,即使不按照顺序也能为指定参数传值
在调用函数时,位置实参与关键字实参可以混合使用,但必须遵循形参规则
不能为同一个形参重复传值
位置必须放到关键字实参前面





默认参数
在定义阶段,已为某个形参赋值,那么该形参就称为默认参数
定义阶段已经有值,就意味着调用阶段可以不传值

位置形参必须在默认参数前面
默认参数值只在定义阶段赋值一次,后面再赋值也就无意义了

默认参数值应为不可变odga
def register(name,age,sex='mail'):
print(name,age,sex)
register('a',18)
register('b',45)
register('b', 45,'c')

m='a'
def register(name,age,sex=m):
print(name,age,sex)
m='11111111111'
register('a',12)
register('b',18)

def register(name,age,l=[]):
l.append(age)
print(name,age,l)
register('a',14)
register('b',46)

def regediter(name,age,l=None):
if l==None:l=[]
l.append(age)
print(name,age,l)
regediter('a',19)
regediter('b',12)

可变长度参数
指参数个数不固定,实参有按位置和关键字定义,因实参给形参传值,所以形参必须有应对的两种方法解决
形参
*args *会将溢出的拉置实参全部接收,保存成元组给args
**kwargs**会将溢出的关键字实参全部接收,然后保存成字典赋给kwargs

实参
一量碰到*就把该实参打散
def foo(x,y,*args):
print(x,y,args)
foo(1,2,3,4,5,6)
foo(1,2,[1,2,3,4])
foo(1,2,*[1,2,3])
foo(1,2,*'hello')
一旦碰到**就把字典打散
def foo(x,y,**kwargs):
print(x,y,kwargs)
foo(x=1,y=1,z=5,a=7)
foo(1,2,c=5,a=8)
foo(1,2,**{'a':1,'b':2})


解释器
def index(name,age,gender):
  print('welcom%s%s%s'%(name,age,gender))
def wrapper(*arge,**kwarge):
  index(*arge,**kwargs)
wrapper('lige',18,'mail')

 

posted on 2018-03-27 14:43  lg04551  阅读(77)  评论(0编辑  收藏  举报