Python函数定义


函数

  • 定义
    • Python函数是由关键字def、函数名、参数列表、语句组成的语句块
    • 是组织代码的最小单元
  • 作用
    • 将某一功能封装起来,方便复用,增强可读性
    • 结构化编程对代码最基本的封装
    • 为了代码美观,减少冗余代码的出现次数
  • 基本形式
    def fName(args):
        codeblock
        [return m]
    
    • 函数名满足标识符的要求
    • return语句省略时,返回None
    • 定义在调用之前,否则会抛出NameError异常

函数定义(调用)的基本格式

  • 函数调用传入的参数与定义的参数个数要保持匹配(不是相等)

普通参数

  1. 普通参数定义法:def fName(x1,x2)
    • 位置参数调用:fName(1,2)
      • 按顺序依次匹配
    • 关键字参数调用:fName(x1=1, x2=2)
      • 按照key值来匹配,变量顺序无所谓
    • 混合调用:fName(2,x2=3)
      • 要求关键字参数对只能写在位置参数之后
      • 不能写成fName(1,x1=3),会提示多次给x1赋值
        • x1后的其余变量必须都使用关键字赋值方式,否则会提示多次赋值

可变参数

  • 无法确定参数个数时,处理方式有:
    • 形参为列表、元祖、集合、字典,手动构建实参来完成不确定数目参数输入
    • 使用下面的可变位置参数、可变关键字参数,函数机制自动打包
  1. 可变位置参数定义法:def fName(x1,x2,*xn)

    • 位置参数调用:fName(1,2,3,4,5,6,...)
      • 参数x1、x2必须有实参
      • 按顺序依次匹配x1,x2,再使用剩下的全部参数匹配xn
      • xn在函数的语句块中会构成一个元祖
      • xn可以是0个参数,所以实参个数>=2
      • 可变位置参数后不能出现普通参数,只能是关键字参数
    • 关键字参数调用(错误栗子)
      • fName(x1=1,x2=3,1,2,3,4,5):关键字参数不允许写在简单变量之前
      • fName(1,2,3,4,5,x1=1,x2=3): 会提示x1,x2被多次赋值
  2. 可变关键字参数定义法:def fName(**kwargs)

    • 调用: fName('a'=a, 'b'=b, 'c'=c)
      • 接受任意多个参数对,构成一个字典

缺省(默认)参数

  • 在参数很多的情况下,减轻函数调用时的负担
  1. 缺省参数定义法:def fName(a,b=3,c=3)
    • 缺省参数只能在普通参数后面出现
    • 调用:fName(1)
      • 对a采用位置参数方式匹配,b、c使用默认值
    • 调用:fName(1,2)
      • 对a、b采用位置参数方式匹配,c使用默认值
    • 调用:fName(1,2,3)
      • 对a、b、c三个参数按顺序依次匹配,b、c覆盖默认值
    • 调用:fName(1,c=3)
      • 对a采用位置参数匹配,b省略,c关键字参数匹配
    • 调用:fName(b=1,c=2,a=4)
      • 使用关键字方式调用,顺序无所谓

KW-ONLY参数

  • 要求函数调用时必须使用关键字的形式
  1. kw-only参数定义:def fName(*,a,b)
    • *: 没有实际意义,只是为了表明a和b是kw-only参数
    • 调用:fName(a=1,b=3) 参数顺序无所谓
    • 可以将a、b写成缺省参数形式(调用时不给实参)
  2. kw-only参数定义:def fName(*arg,a,b)
    • 调用:fName(1,2,3,3,5,5,a=3,b=4)

汇总

  1. 定义中参数的顺序一般是:
    • 普通参数、缺省参数、可变位置参数、kw-only参数、可变关键字参数
      • 缺省参数调用时按照位置参数方式使用

参数解构

  • 参数解构
    • fName(*arg)表示对除字典外的可迭代对象进行解构
      • 要求形参个数与实参个数相匹配
    • fName(**arg) 解构字典对象
      • 要求形参个数与实参个数相匹配
      • 要求实参字典的关键字与形参的关键字匹配

你可能感兴趣的:(Python函数定义)