构造一个可接受任意数量参数的函数。

为了能让一个函数接受任意数量的位置参数,可以使用一个*参数。例如:

def avg(first, *rest):return (first + sum(rest)) / (1 + len(rest))# Sample use
avg(1, 2) # 1.5
avg(1, 2, 3, 4) # 2.5

这个例子中,rest是由所有其他位置参数组成的元组。然后我们在代码中把它当成了一个序列来进行后续的计算。

为了接受任意数量的关键字参数,使用一个以**开头的参数。比如:

import htmldef make_element(name, value, **attrs):keyvals = [' %s="%s"' % item for item in attrs.items()]attr_str = ''.join(keyvals)element = '<{name}{attrs}>{value}</{name}>'.format(name=name,attrs=attr_str,value=html.escape(value))return element# Example
# Creates '<item size="large" quantity="6">Albatross</item>'
make_element('item', 'Albatross', size='large', quantity=6)# Creates '<p>&lt;spam&gt;</p>'
make_element('p', '<spam>')

在这里,attrs是一个包含所有被传入进来的关键字参数的字典。

如果你还希望某个函数能同时接受任意数量的位置参数和关键字参数,可以同时使用*和**。比如:

def anyargs(*args, **kwargs):print(args) # A tupleprint(kwargs) # A dict

使用这个函数时,所有位置参数会被放到args元组中,所有关键字参数会被放到字典kwargs中。

一个*参数只能出现在函数定义中最后一个位置参数后面,而 **参数只能出现在最后一个参数。 有一点要注意的是,在*参数后面仍然可以定义其他参数。

def a(x, *args, y):passdef b(x, *args, y, **kwargs):pass

Python实战从入门到精通第十一讲——可接受任意数量参数的函数相关推荐

  1. Python实战从入门到精通第二十一讲——构建一个模块的层级包

    想将你的代码组织成由很多分层模块构成的包. 封装成包是很简单的.在文件系统上组织你的代码,并确保每个目录都定义了一个__init__.py文件. 例如: graphics/__init__.pypri ...

  2. Python实战从入门到精通第十七讲——将单方法的类转换为函数

    有一个除 __init__() 方法外只定义了一个方法的类.为了简化代码,你想将它转换成一个函数. 大多数情况下,可以使用闭包来将单个方法的类转换成函数. 举个例子,下面示例中的类允许使用者根据某个模 ...

  3. Python实战从入门到精通第二十讲——调用父类方法

    在子类中调用父类的某个已经被覆盖的方法. 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如: class A:def spam(self):print('A.spam')class ...

  4. Python实战从入门到精通第七讲——字符串与文本1之字符串开头或结尾匹配

    通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等. 检查字符串开头或结尾的一个简单方法是使用 str.startswith() 或者是 str.endswith( ...

  5. Python实战从入门到精通第十讲——字符串与文本4之字符串搜索和替换

    在字符串中搜索和匹配指定的文本模式 对于简单的字面模式,直接使用 str.replace() 方法即可,比如: >>> text = 'yeah, but no, but yeah, ...

  6. Python实战从入门到精通第八讲——字符串与文本2之合并拼接字符串

    将几个小的字符串合并为一个大的字符串 合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法.比如: >>> parts = ['Is', ' ...

  7. Python实战从入门到精通第六讲——数据结构与算法4之过滤序列元素

    一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 最简单的过滤序列元素的方法就是使用列表推导: >>> mylist = [1, 4, -5, 10, -7, 2, 3, ...

  8. Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列

    实现一个优先级队列 import heapqclass PriorityQueue:def __init__(self):self._queue = []self._index = ()def pus ...

  9. 【Python】Python实战从入门到精通之三 -- 教你使用Python中条件语句

    本文是Python实战–从入门到精通系列的第三篇文章: Python实战从入门到精通第1讲–Python中的变量和数据类型 Python实战从入门到精通第2讲–Python中列表操作详解 Python ...

最新文章

  1. c++ 获取文件的hashcode_jsp 实现文件上传和下载
  2. 初学__Python——Python代码的组织形式
  3. 2021上半年朋友圈都在传的10本书,找到了
  4. yield表达式形式的应用
  5. 未成年人互联网普及率达99% 腾讯等倡议加强青少年网络素养教育
  6. GDAL源码剖析(十三)之GDAL网格插值说明
  7. thinkphp中AJAX返回ajaxReturn()方法分析
  8. SPSS 多重共线性问题【SPSS 039期】
  9. Java中od方向是什么意思_od的用法
  10. Win10注册DLL办法
  11. JavaBean的前世晋升程序员如何提升领导力
  12. 华为手机被diss:AI拍照涉造假,国外网友又炸锅了
  13. 数字图像处理(5)- 图像恢复
  14. 企业邮箱哪家最优惠?企业邮箱最优惠价格来了
  15. SRS 代码分析【HLS切片】
  16. asp.net会员卡管理系统VS开发sqlserver数据库web结构C#编程
  17. 骆驼命名法,帕斯卡命名法与下划线命名法
  18. 如何看linux版本
  19. 动画蒙太奇(开火需要循环播放)
  20. PT展现场直击,广和通5G模组点亮数字化未来

热门文章

  1. 加拿大上市公司Vinergy更新投资政策 将涉及比特币数字货币等投资
  2. 【Docker】 安装 Docker
  3. 【Android开发】【数据库】Realm For Android
  4. Windows 10 上强制Visual Studio以管理员身份运行
  5. (转载)C语言右移运算符的问题(特别当与取反运算符一起时)
  6. 自制jQuery 复选框全选与反选插件
  7. Silverlight 4.0 Accordion 解决ScrollViewer 的问题
  8. centos7+jexus5.8.3部署ASP.NET的MVC项目
  9. scala helloworld
  10. idea git 整合使用