day9 函数的形参和实参

什么是形参?

什么是实参

注意点

实参值(变量值)与形参(变量名)的绑定关系只在函数调用的时才会生效\绑定,当函数调用结束后,立刻解除绑定

 

什么是位置参数

1位置形参(定义时)调用时必须为其传值,不能多不能少

2位置实参(调用时)实参和形参要一一对应

def foo(x,y,z)

foo(1,2,3)

 

什么是关键字参数

调用时,按key=value 形式定义的实参

注意点

指名道姓地为形参传值,意味着即使不按顺序定义,仍能为指定的参数传值

def foo(1,a=2)

foo(1,a=2)

 

调用函数时,位置实参和关键字实参可以混合使用但必须

例子:

def foo(x,y,z):

  print(x,y,z)

1.遵循形参的规则

foo (1,z=3,y=2) #正确

foo(1,z=3) #报错

2.不能为同一个形参重复传值

foo(1.x=1,y=1,z=2)  #报错

3.位置实参必须放到关键字实参的前面

foo(y=3,z=2,1)  #报错

 

什么是默认参数

定义阶段,已为某个形参赋值

注意点

1.定义阶段已有值,调用阶段可以不传值

def foo(x,y,z=1)

  print(x,y)

2.位置形参必须在默认参数的前面

def foo(y=1,x) #报错

3.默认参数的值只在定义阶段的赋值一次,也就是说默认参数的值在定义阶段就被固定死了

m=10

def foo(x,y=m)

  print(x,y)

m='abc'

foo(1) ==>1  10

foo(1,11) ==>1  11

4记住:默认参数的值该设置为不可变类型

应用:

对于经常需要变化的值,需要将对于的形参对于成位置形参

对于大多数情况值都一样的情况,需要将对应的形参定义成默认参数

 

可变长度参数

def foo(x,y,z,*args,**kwargs)

  foo(x,y,z,*args,**kwargs)

foo(1,2,3,4,5,6,a=1,b=2,c=3)

其中4,5,6被*接收,赋值给zrgs,返回的类型是元组

其中a=1,b=2,c=3被**接收,赋值给kwargs,返回的类型是字典

 

打散

*能用在形参里也能用在实参里

foo(*(4,5,6),**{'a'=1,'b'=2,'c'=3})==>foo(4,5,6,a=1,b=2,c=3)

 

posted @ 2018-03-27 14:51  shanjinghao  阅读(164)  评论(0编辑  收藏  举报