函数之实参的3种形式

 

def foo(x,y):
	print(x)
	print(y)

在实参的角度:

第一种,按照位置传值

fool(1,2)  
fool(2,1) #位置不一样,结果也不一样

第二种,按关键字传值

foo(x=1,y=2)
foo(y=2,x=1) #明确指明,x的位置

第三种,混着用

foo(1,y=2)  
#安位置传值,必须在按关键字传值的前面,否则会报错

 问题二:对于一个形参,不能重复赋值。否则报错,例如

foo(1,x=1,y=2)

  

从形参的角度来分析

#位置参数:1, 必须传值。指的就是形参

                 2, 一一对应。多一个少一个都不行。

                

def foo(x,y):
     print(x)
     print(y)

#从左到右,一一对应,一个个位置来

 

默认参数: 定义阶段,就传值,默认一个值

def foo(x,y=1)
     print(x)
     print(y)
foo(1)
foo(1,2)
foo(y=2,x=2) 

什么时候用默认参数?必须要注意的问题:定义时赋值,默认参数必须放到位置参数的后面

      定义阶段,只检测语法,只要语法没有任何错误,就不会报错。

      调用阶段,会报错。

1,调用时无需传值,比较方便

2,把变化比较小的参数,定义为默认参数

3,默认参数,在函数定义阶段,就已经确定下来

x='male'
def register(sex=x):
     print(sex)

x=None
register()


#还是定义阶段的male,推荐

  

x=[]
def register(name,name_list=x):
     name_list.append(name)

register('333')
register('111')
register('222')

print(x)

#这种模式不推荐

  

 

 

 

 什么时候用,未知参数?

1,经常发生变化的,用未知参数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2018-01-04 14:59  老王的农场  阅读(792)  评论(0编辑  收藏  举报