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

    文章

    3868

    浏览量

    61309
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    函数的几种用法(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

    Python分类数据

    《利用Python进行数据分析》 121 分类数据
    发表于 10-31 09:27

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

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

    python函数使用

    main函数如果你对多种语言都有所了解,那么必定知道main函数是一种十分普遍且必须使用的,如Java、C、C++等。Python同样如此,当我们在编写python程序时,至少应该使用
    发表于 12-09 14:49

    python的常用函数有哪些

    map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个list ,并通过把函数 f 依次作用在list 的每个元素上,得到一个新的 list 并返回。
    发表于 02-25 11:52 9次下载
    <b class='flag-5'>python</b>的常用<b class='flag-5'>函数</b>有哪些

    Python入门之什么是函数

    Python函数比我们想象的更为灵活。由于Python函数是对象,所以函数对象可以赋值给其他的名字、传递给其他
    的头像 发表于 02-21 14:24 324次阅读

    为什么Python没有main函数

    今天的文章中,我们来讨论一下为什么有的编程语言有main函数,而Python为什么没有main函数
    发表于 08-17 11:47 171次阅读

    Python 函数参数分类

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