0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python函数形参的分类

麦辣鸡腿堡 来源:Python都知道 作者:了不起 2023-11-14 11:19 次阅读

形参的分类

形参的分类可以分为六种:

  • 带有默认值的位置形参
  • 不带默认值的位置形参
  • 带有默认值的关键字形参
  • 不带默认值的关键字形参
  • 可变长度的位置形参
  • 可变长度的关键字形参

实例:

def fn(a,b,c=10,*,d,e=20,**kwargs)

1、带及不带默认值的位置形参

实例中,在 * 号之前统称为位置形参,位置形参可以由位置实参及关键字实参进行传值。

不带默认值的位置形参:不带有默认值的位置形参必须要实参进行传值,如果实参不传值就会报错

带有默认值的位置形参:带有默认值的关键字位置实参可以用实参进行传值,也可以不使用实参进行传值,不使用实参进行传值时,使用默认值作为其值

2、带有及不带默认值的关键字形参

实例中 * 以后的参数都是关键字形参,在使用关键字形参时,必须使用关键字实参进行传值,不使用会报错

不带默认值的关键字形参:不带有默认值的关键字形参必须使用关键字实参进行传值,如果不传参数就会报错

带有默认值的关键字形参:带有默认值的关键字形参可以用关键字实参进行传值,也可以不传值,不传值时使用默认值作为其值。

3、可变长度的形参:

可变长度位置形参:

  • 其位置在位置形参及关键字形参之间,当传入的位置实参数量多于位置形参时,多出部分的位置形参会全部存储在可变长度的位置形参中
  • 可变长度的关键字形参就是例子中的 * ,只是给这个形参添加了一个名字,这个名字可以自定义,但是约定俗成的命名为 *args

可变长度的关键字形参:

  • 可变长度的关键字形参位于参数列表的末尾,当传入的关键字实参多与关键字形参时,多出的部分就会被储存在可变长度的关键字形参中,以元组进行存储
  • 可变长度的关键字形参使用 ** 进行表示,此时也需要给关键字形参添加一个名字,这个名字可以自定义,但是约定俗成的称为 **kwargs,以字典进行存储

形参声明时,其声明顺序是有规定的,顺序为:

无默认值位置形参 --> 有关键字位置形参 --> 可变长度的位置形参 --> 无默认值的关键字形参 --> 有默认值的关键字形参 --> 可变长度的关键字形参

常用的参数列表类型:

-- (*args,**kwargs)

-- (a,*args)
-- (a,b=10,**kwargs)
        
-- (a,*,b,**kwargs)
-- (a,*args,b,**kwargs)

在使用形参时要按照位置进行传参,即使是有关键字也要尽量按照位置进行传参,这样更加清晰

打散机制

在使用可变长形参时,当传入的值多余需要的值时会把多余的参数放进可变长位置形参 及 可变长关键字形参,但是如果直接传入一个元组及字典中如何直接将其变为元组及字典呢?

此时需要使用 *** 的打散机制*单列容器 会打散单列容器

**双列容器 会打散双列容器

print(*(a,b,c))  --- >  (a b c)
print(**{a:1,b:2})  --- > {a:1,b:2}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62618
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84689
收藏 人收藏

    评论

    相关推荐

    函数的几种用法(3)#Python

    参数函数python
    未来加油dz
    发布于 :2023年08月24日 17:56:45

    函数的实参与

    函数定义中指定的,在未发生函数调用时不占内存,只有
    发表于 10-18 20:15

    函数,在使用函数时,为什么为变化?

    例如:void delay(uint z){uint x, y;for(x = z; x > 0; x--)for(y = 110; y > 0; y--);}我在调试时,观察X和Z的变化情况,发现z和x的值相同,然后做相同的变化。为什么也会发生变化?
    发表于 08-19 14:13

    stm32库函数查错功能

    的STM32库函数中,对于其提供了查错机制。如下示例是我们常用的GPIO初始化函数,在函数的一开始就使用assert_param(x)对
    发表于 09-11 10:09

    函数为volatile类型,这个有什么意义?

    ((HAL_GetTick() - tickstart) < Delay){}}这是用STM32CubeMX生成的带操作系统工程里面的一个函数,如何理解Delay前面的__IO,还望各路高手指导。
    发表于 11-23 16:44

    为什么28035的cla调用子函数,当超过2个的话,cla 就无法调用子函数?这是什么原因?

    本帖最后由 一只耳朵怪 于 2018-6-14 08:50 编辑 为什么28035的cla调用子函数,当超过2个的话,cla 就无法调用子函数
    发表于 06-13 08:25

    请问CC2541用IAR调试时函数和实参不一样该怎么办?

    IAR 9.30.1调试CC2541的BLE工程时出现函数调用和实参不一致的问题。
    发表于 11-11 10:42

    C语言总结_数组与函数练习题

    字符串标准处理函数介绍(string.h)、指针和数组当做函数,指针定义、函数返回指针、void类型定义指针、类型强制转换、常量声明、e
    的头像 发表于 08-14 09:36 831次阅读

    C语言-函数的可变形(不定形)

    这篇文章介绍C语言函数的不定参数、可变参数 ,实现printf一样的传效果。
    的头像 发表于 08-14 09:58 2672次阅读

    C语言-指针作为函数类型

    C语言函数里最常用就是指针传和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理。
    的头像 发表于 08-14 10:05 1901次阅读

    数组/指针的传问题

    自定义函数的类型,要和函数调用中传过去的实参类型相对应
    的头像 发表于 08-17 10:37 1083次阅读

    指针进阶第五站:函数指针!

    定义一个函数指针,指向的函数有两个int并且返回一个函数指针,返回的指针指向一个有一个int
    发表于 08-17 15:58 535次阅读

    C语言函数参数介绍

    C语言数组元素作函数实参 数组元素可以用作函数实参,不能用作。 C语言在用数组元素作函数实参时,把实参的值传给
    的头像 发表于 03-10 14:30 2392次阅读

    Python 函数参数分类

    文章应该对你会有不小的帮助。 接下来是正文。 1. 参数分类 函数,在定义的时候,可以有参数的,也可以没有参数。 从函数定义的角度来看,参数可以分为两种: 必选参数 :调用函数时必须要
    的头像 发表于 10-21 10:45 798次阅读

    函数参数的分类有哪些

    一、函数参数的分类 函数的参数分为两类: 及 实参
    的头像 发表于 11-14 11:13 2713次阅读