zoukankan      html  css  js  c++  java
  • 第六天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:

        

  • 相关阅读:
    [BZOJ3413]匹配
    [BZOJ3879]SvT
    [BZOJ1339] [Baltic2008] Mafia / 黑手党
    [BZOJ1834] [ZJOI2010] network 网络扩容
    [BZOJ1449] [JSOI2009]球队收益 / [BZOJ2895] 球队预算
    [BZOJ2597] [WC2007]剪刀石头布
    [BZOJ1283]序列
    [BZOJ2127]happiness
    Java公开课-04.异常
    Java公开课-03.内部类
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/13123563.html
Copyright © 2011-2022 走看看