函数参数的使用

函数参数的使用

一、形参与实参介绍

#形参:在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名

def  func(x,y):         #x = 1    y = 2

         print(x,y)

#实参:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值

#func(1,2)


#形参与实参的关系

1、在调用阶段,实参(变量值)会绑定给形参(变量名)

2、这种绑定关系只能在函数体内使用

3、实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系


#实参是传入的值,但值可以是以下形式

形式一:

         func(1,2)

形式二:

         a= 1

         b= 2

         func(a,b)

形式三:

func(int(“1”),2)

func(func1(1,2,),func2(2,3),333)


二、形参与实参的具体使用

1、位置参数:按照从左到右的顺序依次定义的参数称之为位置参数

         位置形参:在函数定义阶段,按照从左到右的顺序直接定义的“变量名”

                   特点:必须被传值,多一个不行少一个也不行

def  func(x,y):

         print(x,y)

func(1,2)

         位置实参:在函数调用阶段,按照从左到右的顺序依次传入的值

                   特点:按照顺序与形参一一对应

func(1,2)

func(2,1)


2、关键字参数

关键字实参:在函数调用阶段,按照key=value的形式传入的值

         特点:指名道姓结某个形参传值,可以完全不参照顺序

         def  func(x,y):

                   print(x,y)


         func(y=2,x=1)

         func(1,2)

#混合使用,强调

1、位置实参必须放在关键字实参前

func(1,y = 2)

fcun(y=2,1) #语法错误


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

func(1,y=2,x=3) #1已经给了x,x=3等于复复传值,会报错


3、默认参数

默认形参:在定义函数阶段,就已经被赋值的形参,称之为默认参数

         特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值

         deffunc(x,y=3):

                   print(x,y)

         #func(x=1)

         #func(x=1,y=333)  非想传值也可以


         def  register(name,age,gender=”男”):

                   print(name,age,gender)

         register(“老大”,18)

         register(“老二”,19)

         register(“老三”,20)


#位置形参与默认形参混用,强调:

1、位置形参必须在默认形参的左边

         def  func(x,y=2):

                   pass

2、默认参数的值是在函数定义阶段被赋值的,准确地说被赋予的是值的内存地址

m = 2

def func(x,y =m):

         print(x,y)

func(1)


3、虽然默认值可以被指定为任意数据类型,但是不推荐使用可变类型

         函数最理想的状态:函数的调用只跟函数本身有关,不受外界代码的影响

         def  func(x,y,z,l=None):

                   ifl is None:

                            l= []

                   l.append(x)

                   l.append(y)

                   l.append(z)

                   print(l)

         func(1,2,3)

         new_l= [11,22]

         func(1,2,3,new_l)

         4、可变长度的参数(*与**的用法)

                   可变长度指的是在调用函数时,传入的值(实参)的个数不固定

                   而实参是用来为形参赋值的,所以对应着针对溢出的实参必须有对应的形参来接收


         可变长度的位置参数

                   *形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的格式然后赋值紧跟其后的形参名,*后跟的可以是任意名字,但是约定俗成应该是args

         deffunc(x,y,*z):

                   print(x,y,z)

         func(1,2,3,4,5,6)

         def  sum(*args):

                   res= 0

                   foritem in args:

                            res+=item

                   returnres

         res= sum(1,2,3,4)

         print(res)

                   *可以用在实参中,实参中带*,先*后的值打散成位置实参

         def  func(x,y,z):

                   print(x,y,z)

         func(*[11,22,33])

         l= [11,22,33]

         func(*l)


形参与实参中都带*

                            def  func(x,y,*args):

                                     print(x,y,args)

                            func(1,2[3,4,5,6])

                            fimc(1,2,*[3,4,5,6])

                            func(*hello)


         可变长度的关键字参数

**形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名

**后跟的可以是任意名字,但是约俗成应该是kwargs

def  func(x,y,**kwargs):

         print(x,y,kwargs)


func(1,y=2,a=1,b=2,c=3)


**可以用在实参中(**后跟的只能是字典),实参中带**,先**后的值打散成关键字实参

def func(x,y,z):

         print(x,y,z)


func(*{“x”:1,”y”:2,”z”:3})

func(**{“x”:1,”y”:2,”z”:3})  #func(x=1,y=2,z=3)


形参与实参中都带**

def  func(x,y,**kwargs):

         print(x,y,kwargs)

func(y=222,x=111,a=33,b=4)

func(**{“y”:222,”x”:111,”a”:333,”b”:444})


混用*与**:*args必须在**kwargs之前

def  func(x,*args,**kwargs):

                   print(args)

         print(kwargs)

func(1,2,3,4,5,6,7,8,x=1,y=2,z=3)


def index(x,y,z):

         print(“index”,x,y,z)

def wrapper(*args,**kwargs):  #args=(1,) kwargs={“z”:3,”y”:2}

         index(*args,**kwargs)

         #index(*(1,)),**{“z”:3,”y”:2}

         #index(1,z=3,y=2)

Wrapper(1,z=3,y=2)  #为wrapper传递的参数是给Index用的

#原格式---》汇总---》打回原形

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容