一、    分配参数的定义

参数收集就是在定义函数时不能确认参数个数,用收集参数将调用时不确定数量的实参存放到收集参数的元组中。分配参数与此过程相反,它不是在定义函数形参时使用星号(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的世界。

最新文章

  1. 【Alpha】Daily Scrum Meeting第十次
  2. iOS开发随笔
  3. 花生壳动态IP域名解析之python自动提交公网IP
  4. zigbee学习之路(七):定时器3(中断方式)
  5. SQL Server 基础:Cast和Convert的区别
  6. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
  7. Django 模型中自定义Manager和模型方法
  8. 如何在 Centos7 中安装 nginx
  9. 02网格布局Gridlayout
  10. 页面加载过渡页 loading plugin css
  11. eShopOnContainers 看微服务④:Catalog Service
  12. RabbitMQ安装及使用
  13. SAP WM 有无保存WM Level历史库存的Table?
  14. MVC5+EF6 --自定义控制Action访问权限
  15. [2017BUAA软工助教]团队alpha得分总表
  16. Java基础——GUI编程(二)
  17. Linq join right join left join
  18. docker 带参数启动 配合springboot profile
  19. Google C++单元测试框架
  20. Linux命令详解-rm

热门文章

  1. 系统解析Apache Hive
  2. leetcode64:maximal-rectangle
  3. unix进程间通信方式(IPC)
  4. 监控-Cat项目部署
  5. 模拟微信小程序页面Page方法
  6. 邻居子系统 arp 状态图
  7. 自动化测试_移动端测试(二)—— Appium原理
  8. 《Machine Learning in Action》—— 小朋友,快来玩啊,决策树呦
  9. HttpClient4.3 连接池参数配置及源码解读
  10. Cassandra + JSON?答案就是Stargate Documents API