函数的参数
1.形参与实参
形参(形式参数):指的是在定义函数时,括号内定义的参数,形参其实就是变量名
实参(实际参数):指的是在调用函数时,括号内传入的值,实参其实就是变量的值

#x,y是形参
daf func(x,y):
    print(x)
    print(y)
#10,11是实参
func(10,11)

2.注意:
实参值(变量的值)与形参(变量名)的绑定关系只在函数调用时才会生效/绑定在函数调用结束后就立即解除绑定


位置参数
1、位置即顺序,位置参数指的就是按照从左到右的顺序依次定义的参数

2、分两种
1.在定义函数时,按照位置定义的形参,称为位置形参
def foo(x,y,z)
    print(x,y,z)
foo(1,2,3)
foo(1,2) #报错
foo(1,2,3,4) #报错
注意:
位置形参的特点是:在调用函数时必须为其传值,而且多一个不行,少一个也不行

2.在在调用函数时,按照位置定义的实参,称为位置实参
注意:位置实参会与形参一一对应
def foo(x,y,z)
    print(x,y,z)
foo(1,5,2)

关键字参数
1.什么是关键字参数
在调用函数时按照key=value的形式定义的实参称为关键字参数
def foo(x,y,z)
     print(x,y,z)
foo(x=1,y=2,z=3)
注意:
1.相当于指名道姓的为形参传值,意外着即便是不按照顺序定义,仍然能为指定的参数传值
ef foo(x,y,z)
     print(x,y,z)
foo(x=3,y=1,z=4)

2.在调用函数时,位置实参与关键字实参可以混合使用,但必须
1.遵循形参的规则
foo(1,z=3,y=2)
foo(1,z=3) #报错

2.不能为同一个形参重复传值。
foo(1,x=1,y=3,z=2)

3.位置实参必须放到关键字实参的前面
foo(y=3,z=2,1)


默认参数
1.在定义阶段,已经为某个形参赋值,那么该形参就称为默认参数
注意:在定义阶段已经有值,意味着调用阶段可以不传值
def register(name,age,sex='male'):
      print(name,age,sex)
register('alex',20,)
register('egon',18,)
register('xxx',20,'female')


2.位置形参必须在默认参数前面
def func(y=1),x): #报错
       pass

3.在默认参数的值只在定义阶段赋值一次,也就是说默认参数的值再定义阶段就固定死了
m=10
def foo(x,y=m)
     print(x,y)
foo(1)

4.记住默认参数的值应该设置为不可变类型
def register(name,hobby,l=None)
     if l is None
        l=[]
        l.append(hobby)
        print(name)
regidtrer('wxx','play')
regidtrer('alex','read')


应用:
对应经常需要变化的值,需要将对应的形参定义成位置形参,对于大多数情况值都一样的情况需要将对应的形参定义成默认参数


可变参数
1.什么是可变长度参数
可变长度指的参数的个数可以不固定,实参有按位置定义的实参和按关键字定义的实参,
所以可变长的实参指的就是按照这两种形式定义的实参个数可以不固定,
然而实参终究是要给形参传值的
所以形参必须有两种对应的解决方案来分别处理以上两种形式可变长度的实参

###############形参里面包含*与**
*会将溢出的位置实参全部接受,然后保存成元组赋值给一个变量名(args)
def foo(x,y,z,*args):
    print(x,y,z)
    print(args)
foo(1,2,3,4,5,6,7,8)

**会将溢出的关键字实参全部接受,然后保存成字典的形式赋值给(kwargs)
def foo(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)
foo(x=1,y=2,a=1,b=2,c=3)

###############实参里面包含*与**
一旦碰到实参加*,就把该实参的值打散
def foo(x,y,z,*args)
     print(x,y,z)
     print(args)
foo(1,2,3,*'hello')


一旦碰到实参加**,就把该实参的值打散
def foo(x,y,z,**kwargs):
     print(x,y,z)
     print(kwargs)
foo(1,2,3,**{'a':1,'b':2})

组合使用
def index(name,age,gender):
      print('welcome %s %s %s' %(name,age,gender))

def wrapper(*args,**kwargs): 
      print(args)
      print(kwargs)
index(*args,**kwargs)

wrapper(name='egon',age=18,gender='male')
wrapper('egon',18,'male')

 

 

命名关键字的参数
格式:在*后面的参数,都是命名关键字参数
特点:必须被传值
1.约束函数的调用者必须按照key=valve的方式传值
2.约束函数的调用者必须用我们指定的key名

posted on 2018-03-31 10:22  muzinianhua  阅读(209)  评论(0编辑  收藏  举报