一、    分配参数的定义

参数收集就是在定义函数时不能确认参数个数,用收集参数将调用时不确定数量的实参存放到收集参数的元组中。分配参数与此过程相反,它不是在定义函数形参时使用星号(1个或2个),而是在调用函数传递实参时使用星号(1个或2个)来传递多个参数。

二、    分配参数的使用

1.    使用1个星号的分配参数

使用1个星号的实参时,实参为一个元组、列表、字典或集合,该实参内的元素将按参数顺序传递给函数,但由于字典实际传值取的是键,集合的元素没有顺序,因此不建议使用字典和集合传值。

举例:

>>> def  cal(calmethod,number1,number2,*numbers):

    print('number1=',number1,',number2=',number2,',numbers=',numbers,', calmethod=',calmethod)

    

>>> paras=('+',1,2,3,4) #元组分配参数传值

>>> cal(*pars)

number1= 1 ,number2= 2 ,numbers= (3, 4) , calmethod= +

>>> paras=['+',1,2,3,4]

>>> cal(*paras) #列表分配参数传值

number1= 1 ,number2= 2 ,numbers= (3, 4) , calmethod= +

>>> paras={'+',1,2,3,4}

>>> cal(*paras) #集合分配参数传值,顺序变化了

number1= 2 ,number2= 3 ,numbers= (4, '+') , calmethod= 1

>>> paras={'+':10,1:20,2:30,3:40,4:50}

>>> cal(*paras) #字典分配参数传值,取的是键作为参数

number1= 1 ,number2= 2 ,numbers= (3, 4) , calmethod= +

 

 

从上面的例子可以看出,一个星号的收集参数可以通过1个星号的分配参数方式传值。

老猿认为,分配参数实际上就是将实参传递的序列数据解包给对应形参的过程。

2.    使用2个星号的分配参数

使用2个星号的实参时,实参为一个字典,该字典内的元素将按关键字参数模式传递给函数,其中的键为关键字参数,值为关键字参数对应的实参值。使用这种模式要求该实参位于参数列表末尾。还是以上面函数为例:

\>>> paras={'calmethod':'+','number1':1,'number2':2,'numbers':[3,4,5]}

\>>> cal(**paras) #报错遇到没有预期的关键字参数'numbers'

\>>> paras={'calmethod':'+','number1':1,'number2':2,'numbers':(3,4,5)}

\>>> cal(**paras) #报错遇到没有预期的关键字参数'numbers'

\>>> paras={'calmethod':'+','number1':1,'number2':2,'*numbers':(3,4,5)}

\>>> cal(**paras) #报错遇到没有预期的关键字参数'*numbers'

\>>> paras={'calmethod':'+','number1':1,'number2':2}

\>>> cal(**paras)

number1= 1 ,number2= 2 ,numbers= () , calmethod= +

 

从上面的案例可以看出来:

1)    两个星号的参数分配不能给两个星号的收集参数传值,因为这没有意义,还不如直接使用形参为字典类型实参是字典数据进行操作。

2)    分配参数模式和收集参数模式可以并存,如上面的例子,但这种使用方式意义不大,一般不建议使用。

本节对Python函数的分配参数的内容结合例子进行了详细介绍,相关内容稍微有点复杂,希望老猿介绍的内容能有助于大家理解函数的分配参数使用方法。截止本节为止,函数的参数使用方法基本介绍完了,大家好好理解掌握一下。

     老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

第5.3节 详说Python风格的函数分配参数的更多相关文章

  1. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  2. python中的函数的参数和可变参数

    最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...

  3. python 复习 4-1 函数、参数、返回值、递归

    函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...

  4. python 中_init_函数以及参数self

    1)class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2)_init_函数(方法) 1.首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问. 2. ...

  5. python中定义函数和参数的传递问题

    作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 ...

  6. Python进阶04 函数的参数对应

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经接触过函数(function)的参数(arguments)传递.当时我们根 ...

  7. python学习:函数传参数

    #!/usr/bin/python   import sys   def isNum(s):     for i in s:         if i in '0123456789':         ...

  8. python报错函数传参数传多了

    写python的时候报错: Exception : Traceback (most recent call last): File , in __bootstrap_inner self.run() ...

  9. 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...

随机推荐

  1. 简单red5+obs推流实现直播系统开发,具体设置介绍

    前言:随便搞搞,先放一张效果图,

  2. linux + MongoDB 安装 + 部署 + 讲解 (满满干货看完记得收藏噢)

    话不多说开始了! 安装 安装就依据菜鸟教程的进行安装 传送门 => https://www.runoob.com/mongodb/mongodb-linux-install.html 好啦!现在 ...

  3. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  4. 腾讯云--cdn静态内容上传刷新

    一.cdn缓存刷新 当静态内容需要更新时,通常会往COS覆盖上传,不覆盖删除上传等进行更新资源或删除对象存储中的内容. 如果配置的CDN缓存过期时间较长,会导致文件更新后其他边缘节点依旧会缓存旧资源: ...

  5. 【Mycat】Mycat核心开发者带你看尽Mycat三大核心配置文件

    写在前面 在分布式数据库中间件领域,Mycat和ShardingSphere可以说是在开源界有着相当重要的位置,不少小伙伴也在问我:Mycat和sharding-jdbc哪个好呀!其实,就我本身而言, ...

  6. 对udp dns的一次思考

    目前昨天查一个线上问题:""dns服务器在我们的设备, 有大量的终端到设备上请求解析域名,但是一直是单线程,dns报文处理不过来", 然而设备是多核,dns服务器一直不能 ...

  7. Kafka架构深入:Kafka 工作流程及文件存储机制

    kafka工作流程: 每个分区都有一个offset消费偏移量,kafka并不能保证全局有序性. Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的 ...

  8. shell编程之字符串操作

    shell中字符串操作主要有以下几种,其中:pattern ,old中可以使用通配符: ${#var} :返回字符串变量var的长度 ${var:m} :返回${var}中从第m+1个字符到最后的部分 ...

  9. 《GNU_makefile》——第八章 内嵌函数

    函数可以带参数,函数的展开方式和变量展开一样,函数的返回结果替换调用函数的文本. 1.函数的调用 $(FUNCTION ARGUMENTS) 或者: ${FUNCTION ARGUMENTS} FUN ...

  10. 【Redis】利用 Redis 实现分布式锁

    技术背景 首先我们需要先来了解下什么是分布式锁,以及为什么需要分布式锁. 对于这个问题,我们可以简单将锁分为两种--内存级锁以及分布式锁,内存级锁即我们在 Java 中的 synchronized 关 ...