python 中的参数顺序

一 python 中参数自定义分类


为了方便本文描述,将参数自定义为如下类型 【自定义 自定义 自定义 别纠结】

  • 形参:

    • 位置参数

    • 默认参数

    • 位置不定长

    • 关键字不定长

  • 实参:

    • 位置实参

    • 关键字实参

二、位置参数使用


  def fn(a, b):
  pass
  • a 和 b 为位置参数 形式的形参

  • 调用时:

    • 全部位置实参:

      • 要求必须要 一 一对应

      • 要求实参与形参数量必须对等

      • fn( 1, 2 )

    • 全部关键字实参:

      • 要求实参数量与形参需要对等

      • 因为使用了关键字指定,顺序可以自定义

      • fn(b=3, a=4)

    • 位置+关键字实参:

      • 要求数量对等

      • 此时位置参数必须写在关键字的前面

      • fn(1, b=4)

三、默认参数使用


 def fn(a, b, c=3):
     pass
  • a b 是位置的形参, c 是默认参数

  • 定义时:

    • 默认参数必须放置于位置参数后面,因为默认参数后只能放默认

  • 调用时:

    • 全部位置参数无默认值:

      • 此时遵守位置参数规则即可,数量对等, 一 一对应

      • 默认值参数走默认

      • fn(1,3)

    • 全部位置参数有默认值

      • 此时遵守位置参数必须先于关键字实参

      • fn(1,3,c=6) || fn(1, 3, 6)

    • 全部关键字参数无默认值

      • 此时遵守关键字参数规则,数量对等,可自定义顺序

      • 默认值参数走默认

      • fn(b=4, a=4)

    • 全部关键字参数有默认值

      • 此时遵守关键字参数规则,数量对等,可自定义顺序

      • 此时默认值只能通过关键字传入

      • fn(b=6, c=4, a=1)

四、位置不定长 + 关键字不定长


不定长指的是实参数 个数不确定,希望函数可以接收用户自义数量的实参

01 位置不定长**

  • 定义时

    • 函数定义时 设置 *args 形参,变量名可自定义

  • 调用时

    • 传入一定数量的位置参数

    • 此时会自动的生成元组 args ,存放所有的位置参数值

02 关键字不定长

  • 定义时

    • 函数定义时 设置 **kwargs 形参,变量名可自定义

  • 调用时

    • 传入一定数量的关键字实参

    • 自动生成字典存放关键字实参

五、参数位置及顺序总结


上述不同形式的形式可同时出现,调用时 实参需要满足对应的规律

01 定义时

  • 如果只有位置+默认, 那么默认一定放置于位置之后

  • 如果位置不定长 + 默认,建议将默认放置于位置不定长前

  •  def fn(default=3, *args):
         pass
     # 此时虽然 *args 可以放置在 default 的前面,但是调用时容易出错
     
  • 如果位置不定长 + 关键字不定长 + 默认同时存在,建议如下

  •  def fn(default=3, *args, **kwargs):
         pass
     
     # 此时 default 必须在 **kwargs 的前面,不然无法区分哪个是默认形参
     

02 调用时

如果定义时的顺序敲定了,调用时实参按着形参的规则来走就可以

 

 

posted @ 2019-04-12 13:19  麻团boy  阅读(633)  评论(0编辑  收藏  举报