我们在写Python代码的时候,有的时候需要设计一种函数,这种函数的参数个数不确定,或者说要求函数的参数不限个数,只有在函数被调用的时候,才能确定参数的数量。本文介绍如何实现这样的函数参数接口的设计。

tuple参数(*args)

我们在设计函数参数的时候,如果使用一个*符号后跟字母,表示这是一个tuple参数,tuple内数据的个数,就不限制了。

我们来设计一个简单的函数,这个函数的作用就是将tuple参数内所有的数据相加求和:

>>> def add(*args):
...     print(args)
...     print(type(args))
...     sum = 0
...     for i in range(len(args)):
...         sum += args[i]
...     print(sum)
...
>>> add(1,2,3)
(1, 2, 3)
<class 'tuple'>
6
>>> add(1,2,3,8,9,666)
(1, 2, 3, 8, 9, 666)
<class 'tuple'>
689
>>> add()
()
<class 'tuple'>
0

add函数的参数,args,符号后面必须要有字母跟随,如果参数是一个独立的*符号,语义是不一样的!

args参数在函数内部,是一个tuple类型的对象,使用时要去掉前面的符号,直接使用args。在调用函数时,看不出来这是一个tuple,调用时并无特别之处,只是参数的数量不确定,可以很多,注意哦,也可以没有参数。

实现不限参数个数的函数接口,一般都使用这种方式,tuple对象内的各数据类型应该保持一致,如果不一致,大概率这不是一个好的设计,因为对各数据的处理方式会不一样。

dict参数(**kwargs)

设计函数参数时,如果使用两个**符号后跟字母,表示这个参数是一个dict对象。这种方式也可实现函数参数的个数不限。

下面的代码示例,是一个输入dict参数的函数,函数的作用,将dict对象中的数据,全部以 key : value 配对的方式显示出来:

>>> def test_kw(**kwargs):
...     print(kwargs)
...     print(type(kwargs))
...     for k,v in kwargs.items():
...         print(k,':',v)
...
>>> test_kw(a=1,b=2,c=3,d=4)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
<class 'dict'>
a : 1
b : 2
c : 3
d : 4
>>> test_kw(a=1,b=2,c=3,d=4,x=999)
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'x': 999}
<class 'dict'>
a : 1
b : 2
c : 3
d : 4
x : 999
>>> test_kw()
{}
<class 'dict'>

采用**kwargs参数,函数调用时,要写成key=value的形式。同样的,这种方式也兼容没有参数输入。

使用这种方式的dict参数,函数内部可能需要预先知道有哪些key值可以使用,或者就是直接遍历所有的key和value。我想到了这样一个应用场景,设计一个函数,作用是替换输入字符串中的某些字符,返回新字符串,替换规则通过**kwargs传入。代码实现如下:

>>> def char_replace(originstr, **kwargs):
...     newstr = ''
...     for c in originstr:
...         if c in kwargs.keys():
...             newstr += kwargs[c]
...         else:
...             newstr += c
...     return newstr
...
>>>
>>> char_replace('abcde', a='x')
'xbcde'
>>> char_replace('abcde', a='x',c='y')
'xbyde'
>>> char_replace('abcde', a='x',c='y',e='z')
'xbydz'

以上就是在Python中,实现函数参数个数不确定的两种方法。


http://www.taodudu.cc/news/show-2666876.html

相关文章:

  • 计算机专业公务员三不限,公务员:三不限岗位是大坑,这3类专业最受欢迎,选对才是硬道理...
  • dns异常
  • 无线路由器DNS服务器异常,fast无线路由器dns异常的解决方法
  • xp系统dns服务器异常,电脑dns异常怎么修复,电脑dns异常修复方法介绍
  • 路由器显示dns服务器异常怎么办,手机显示DNS异常解决方法(图文)
  • DNS服务器存在问题需要修复,dns服务(dns异常怎么都修复不了)
  • 域名转发修改dns服务器,域名注册修改DNS服务器
  • dns服务器地址为空,dns服务器地址为空
  • dns服务器修复视频,修复dns异常最为简单的方法,一起学习吧
  • 搜集ipv6 DNS服务器信息,IPV6 DNS服务器地址列表
  • 监控系统首选DNS服务器,监控windows DNS服务器
  • win7无法自动获取dns服务器地址,Windows7系统DNS服务器故障怎么解决?
  • dns配置异常怎么修复_win10 dns异常怎么修复
  • 360断网急救箱 dns服务器未响应,发现DNS服务异常,用360断网急救箱修复后过一段时间又复发。怎么办?...
  • linux中dns服务故障,Linux DNS服务器故障解决
  • 改为dns服务器响应的原因,2020年dns服务器异常的原因及解决方法
  • 磊科路由器dns服务器老要修复,路由器dns异常解决方法
  • 路由器输入正确的dns服务器,路由器显示DNS服务器异常怎么解决
  • W7系统dns辅服务器异常,win7dns服务器异常原因及解决方法
  • 手机显示DNS服务器异常,手机dns服务器异常怎么设置
  • 毕业设计 基于STM32厨房环境监控报警系统
  • 胡闹厨房2 for Mac厨房模拟游戏又名煮糊了2
  • python爬取下厨房每周最受欢迎菜谱
  • python爬虫爬取下厨房食谱,周末聚餐真的停不下来
  • 下厨房(istringstream的使用)----网易2017内推笔试编程题合集
  • 最美应用-从Android研发工程师的角度之[厨房故事]
  • 多益网络社招iq_多益网络2018秋招iq测试题(二)
  • 基于物联网的智能厨房安全监测系统-上位机程序
  • 基于机智云平台的厨房智能监控系统
  • 450g带盖吐司配方_【最好吃的吐司记录450克的做法步骤图】偶尔小雨_下厨房

python中实现函数不限制参数的数量相关推荐

  1. python函数不包括参数函数_python中实现函数不限制参数的数量

    我们在写Python代码的时候,有的时候需要设计一种函数,这种函数的参数个数不确定,或者说要求函数的参数不限个数,只有在函数被调用的时候,才能确定参数的数量.本文介绍如何实现这样的函数参数接口的设计. ...

  2. python中的函数不包括参数函数_在Python中定义函数时不需要声明函数参数的类型。...

    的书面申提出员本机关请公务辞职人向任免,定义的类应当月内在(机关)个任免审批. 应通)作过(出确认,函数函数的处到预目的质量期的否达理是事故,依然隐患存在是否. 不正下列确的说法是(,时不声明标文部分 ...

  3. python中figure函数_Python figure参数及subplot子图绘制代码

    1. Python的figure参数主要有: def figure(num=None, # autoincrement if None, else integer from 1-N figsize=N ...

  4. python中函数的参数_Python小知识-Python中的函数参数(基础篇)

    0 总述 这个题目分为2篇,第一篇基本上是概念以及实例,有个相对系统的认识,第二篇想写的深入一些,不同参数类型的区别以及和c/c++的函数参数对比下异同-下面开始是第一篇的内容啦- Python中的函 ...

  5. python中choice()函数的参数_Python中choice函数如何实现?

    熟悉Python的小伙伴是知道Python是可以生成随机项的,python中choice函数是random模块的随即取样函数,它可以通过导入 random 模块,调用 random 静态对象生成Pyt ...

  6. Python中自定义函数参数类型

    函数:函数是组织好的,可以重复使用的,用来实现单一的或相关联功能的代码段. 函数可以提升代码的复用率,提升代码的模块性,提升代码可维护性 使用def 关键字定义函数,例如:def func1(): 形 ...

  7. Python 中product函数的用法以及该函数中repeat参数的意义

    Python中product函数用于生成两个可迭代对象的笛卡尔积: 假设我们有两个列表: A = [1, 2, 3] B = ['A', 'B', 'C'] from itertools import ...

  8. python中pop函数_Python中的Pop函数

    python中pop函数 什么是弹出功能? (What is the pop function?) The method pop() removes and returns the last elem ...

  9. 技术图文:举例详解Python中 split() 函数的使用方法

    背景 这篇文章主要介绍Python中的split()函数的使用方法,split()函数通常用于将字符串切片并转换为列表,需要的朋友可以参考一下. 技术分析 Python中有split()和os.pat ...

  10. python中eval()函数的使用

    python中eval()函数的使用 python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果. 函数定义: eval(expression, globals=None, l ...

最新文章

  1. 睡眠不足,记忆力还有救吗?Nature:饿着
  2. datatable与SqlDataReader
  3. linux(gentoo)安装配置conky
  4. Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析
  5. httpinvoker远程调用超时_RPC远程过程调用协议工作原理分析
  6. CSS多行文本垂直居中
  7. oracle loder nextval,ORA-07445: 出现异常错误: 核心转储
  8. 前端js 实现文件下载
  9. 【Matplotlib】详解图像各个部分
  10. linux发布微软消息队列,消息队列RabbitMQ入门与5种模式详解
  11. Smobiler图片二进制上传处理
  12. 已知两点和切线如何确定圆心和半径长度
  13. Flink 使用Table Api 读取文件数据并写出到文件中
  14. WAF(网络应用防火墙)是什么
  15. ffmpeg把透明背景图片合成透明背景视频
  16. Vue学习--子组件向父组件传值
  17. PointRend使用记录
  18. 谷粒商城项目篇14_分布式高级篇_订单支付
  19. 基于飞蛾火焰优化算法的函数寻优算法
  20. 【UnityIUnity精灵Unity物体】生成控制大量物体的时间考究

热门文章

  1. 计算机的经历和灵感,从电脑编程灵感中得到的启发
  2. 程序员如何跳出死循环,不作所谓的“程序猿”
  3. 利用akshare读取50EFF期权1
  4. 阿里云智能编码插件Cosy,提升开发效率杠杠滴!
  5. SQL基础知识归纳总结
  6. win7启动任务管理器快捷键
  7. moment系列一:add() 方法和subtract() 方法的使用
  8. 破解access密码
  9. 毕业设计 stm32车牌识别系统设计与实现 - 单片机 嵌入式
  10. HDU Today-SPEA