第六天python3 函数、参数及参数解构(一)

函数

  作用:结构话编程对代码的最基本的封装,一般按照功能组织一段代码,封装的目的是为了复用,减少冗余代码,代码更加简洁、美观,可读易懂;

  分类:

    内建函数,如max() reversed()等

    库函数,如math.ceil()等

函数定义、调用

  def语句定义函数

  def 函数名(参数列表):

    函数体(代码块)

    [return 返回值]

  函数名就是标识符,语句块必须缩进,约定4个空格;python的函数没有return语句,隐式返回一个None值;定义中的参数列表成为形式参数,只是一种符号表达,简称形参

  函数定义,只是声明了一个函数,它不会被执行,需要调用;调用的方式,就是函数名加上小括号,括号内写上参数,调用时写的参数是实际参数,是实实在在传入的值,简称实参

  举例:

      

  上图所示只是一个函数的定义,又一个函数叫做add,接收2个参数,计算结果通过返回值返回,调用通过函数名add加两个餐素,返回值可使用变量接收;定义需要在调用前,也就是说调用时,已经被定义过了,否则抛NameError异常;函数是可调用的对象,callable(); 

      

函数的参数

  参数调用时传入的参数要和定义的个数相匹配(可变参数例外);

  位置参数

    def f(x,y,z) 调用使用f(1,3,5) 按照参数定义顺序传入实参

  关键字参数

    def f(x,y,z) 调用使用f(x=1,y=3,z=5) 使用形参的名字来出入实参的方式,如果使用来形参名字,那么传参顺序就可和定义顺序不同;

  传参

    f(z=None,y=10,x=[1])  关键字或者命名参数传参

    f((1,),z=6,y=4.1)  位置和关键字参数使用传参;

    f(y=5,z=6,2)  #这个有问题,要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的;

函数参数默认值

  参数默认值:定义时,在形参后跟上一个值

    def add(x=4,y=5):

      return x+y

    测试调用add(6,10)、add(6,y=7)、add(x=5)、add()、add(y=7)、add(x=5,y=6)、add(y=5,x=6)

  作用:

    参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值;  

    参数非常多的时候,并不需要用户每次都输入所有的参数、简化函数调用;

  示例:

    

可变参数

  一个形参可以匹配任意个参数

  示例:有多个数,需要累加求和;

     

   传入可迭代对象,迭代元素求和;

  位置参数的可变参数

        

    在形参前使用*表示该形参是可变参数,可以接收多个实参;

    收集多个实参为一个tuple;

   关键字参数的可变参数

    示例:配置打印信息

    

    如上图所示:形参前使用**符号,表示可以接收多个关键字参数;收集的实参名称和值组成一个字典;

   可变参数混合使用

    def showconfig(username,password,**kwargs)
    def showconfig(username,*args,**kwargs)
    def showconfig(username,password,**kwargs,*args)

总结:

  有位置可变参数和关键字可变参数

  位置可变参数在形参前使用一个*号;

  关键字可变参数在形参前使用两个**号;

  位置可变参数和关键字可变参数都可一收集若干个实参,位置可变参数收集成一个tuple,关键字可变参数收集成一个dict;

  混合使用参数的时候,可变参数更要放到参数列表之后,普通参数需要放到参数列表前面,位置可变参数需要在关键字可变参数之前;

  举例:

    

keyword-only参数

  keyword-only参数是python3之后加入的,如果在一个*号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的参数了,而是keyword-only参数;

  示例:

        

      如上图所示:args可以看作已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参;

  keyword-only参数的另一种形式

    

     如上图所示:*号之后,普通形参都变成了必须给出的deyword-only参数;属于特殊写法,*号没有任何意义;

可变参数和参数默认值

  举例:

    x是keyword-only参数

  示例2:

    

原文地址:https://www.cnblogs.com/zhangzhide/p/13123563.html