Python3中参数*args和**kwargs介绍
在Python中,我们可以使用两种特殊符号将可变数量的参数传递给函数:*args和**kwargs。你可以使用任何单词代替args和kwargs,但通常做法是使用args和kwargs。
*args允许函数接受任意数量的位置参数(positional arguments)。
**kwargs收集所有未明确定义的关键字参数。因此,它执行与*args相同的操作,但针对关键字参数。**kwargs允许函数接受任意数量的关键字参数。默认情况下,**kwargs是一个空字典。每个未定义的关键字参数都作为键值对存储在**kwargs字典中。
Python不允许位置参数跟在关键字参数之后。
位置参数(positional arguments)和关键字参数(key word arguments)区别:位置参数仅由名称声明;关键字参数由名称和默认值声明。调用函数时,必须给出位置参数的值,否则会得到一个error。如果我们没有为关键字参数指定值,它将采用默认值。
我们可以在函数中同时使用*args和**kwargs,但*args必须放在**kwargs之前。
我们可以使用*args和**kwargs打包和解包(pack and unpack)变量。
以上内容和以下测试代码主要参考:https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749
# https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749
var = 8
if var == 1:# *args允许函数接受任意数量的位置参数def addition(*args):result = 0for i in args:result += ireturn result# 传递给此addition函数的参数存储在一个元组中,因此可以迭代args变量print("addition():", addition())print("addition(1, 4):", addition(1, 4))print("addition(1, 7, 3):", addition(1, 7, 3))
elif var == 2:def arg_printer(a, b, *args):print(f"a is {a}")print(f"b is {b}")print(f"args is {args}")# 前两个值被赋予a和b,其余值存储在args元组中arg_printer(3, 4, 5, 8, 3)# Python希望将关键字参数放在位置参数之后# 如果为位置参数赋值,它就成为关键字参数.由于它后面是位置参数,因此会得到一个SyntaxError#arg_printer(a=4, 2, 4, 5) # SyntaxError: positional argument follows keyword argument
elif var == 3:def addition(a, b, *args, option=True): # option是关键字参数result = 0if option:for i in args:result += ireturn a + b + resultelse:return resultprint(addition(1,4,5,6,7)) # 23print(addition(1,4,5,6,7, option=False)) # 0
elif var == 4:# **kwargs允许函数接受任意数量的关键字参数,它收集所有未明确定义的关键字参数,默认**kwargs是一个空字典,每个未定义的关键字参数都作为键值对存储在**kwargs字典中def arg_printer(a, b, option=True, **kwargs):print(a, b) # 3 4print(option) # Trueprint(kwargs) # {'param1': 5, 'param2': 6}arg_printer(3, 4, param1=5, param2=6)
elif var == 5:# 我们可以在函数中同时使用*args和**kwargs,但*args必须放在**kwargs之前def arg_printer(a, b, *args, option=True, **kwargs):print(a, b) # 1 4print(args) # (6, 5)print(option) # Trueprint(kwargs) # {'param1': 5, 'param2': 6}arg_printer(1, 4, 6, 5, param1=5, param2=6)
elif var == 6:# 我们可以使用*args打包和解包(pack and unpack)变量def arg_printer(*args):print(args)lst = [1,4,5]# 如果我们将一个列表传递给arg_printer,它将作为一个元素存储在args元组中arg_printer(lst) # ([1, 4, 5],)# 如果我们在lst之前放一个星号,列表中的值将被解包(unpack)并单独存储在args元组中arg_printer(*lst) # (1, 4, 5)tpl = ('a','b',4)# 我们可以传递多个可迭代对象与单个元素一起解包(unpack),所有值都将存储在args元组中arg_printer(*lst, *tpl, 5, 6) # (1, 4, 5, 'a', 'b', 4, 5, 6)
elif var == 7:# 我们也可以使用关键字参数(keyword argument)进行打包和解包(pack and unpack),# 但是作为关键字参数传递的迭代必须是一个映射,比如字典def arg_printer(**kwargs):print(kwargs)dct = {'param1':5, 'param2':8}arg_printer(**dct) # {'param1': 5, 'param2': 8}# 如果我们还将额外的关键字参数与字典一起传递,它们将组合并存储在kwargs字典中arg_printer(param3=9, **dct) # {'param3': 9, 'param1': 5, 'param2': 8}
elif var == 8:# reference: https://www.geeksforgeeks.org/args-kwargs-python/def myFun(arg1, arg2, arg3):print(f"arg1: {arg1}, arg2: {arg2}, arg3: {arg3}")args = ("Geeks", "for", "Geeks")myFun(*args) # arg1: Geeks, arg2: for, arg3: Geekskwargs = {"arg1" : "Geeks", "arg2" : "for", "arg3" : "Geeks"}myFun(**kwargs) # arg1: Geeks, arg2: for, arg3: Geeksprint("test finish")
GitHub:https://github.com/fengbingchun/Python_Test
相关文章:
4大主流CPU处理器技术架构,不知道就out了!
作者 | 王艺威责编 | 阿秃RISC(精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的…

grunt-connect-proxy解决开发时跨域问题
最近的项目中前后端是完全分离开发的,前端用grunt管理项目。这样就会导致一个问题:开发时前端调用后台的接口时因为不在一个服务器,所以会出现跨域问题。但是也不能用JSONP或CROS方式实现真正的跨域,因为项目发布时其实是在同一个…
混合推荐系统就是多个推荐系统“大杂烩”吗?
作者丨gongyouliu编辑丨zandy【导读】在本篇文章中,我们会介绍混合推荐系统(Hybrid Recommender Systems),就是利用多种推荐算法配合起来做推荐,期望避免单个推荐算法存在的问题,最终获得比单个算法更好的推荐效果。本篇文章我们从…

Python3中collections.OrderedDict介绍
Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict、list、set和tuple的替代选择,包括namedtuple、deque、ChainMap、Counter、OrderedDict、defaultdict、UserDict、UserList、UserString。这里介绍下OrderedDictÿ…

汗!雅虎中国个人空间
今天发现雅虎中国有了个人空间,偷偷试了下,让人失望到极点,几乎没有什么特点,和MSN很相似,空间相册放着好好的Flickr不用,偏偏弄了个很垃圾的相册,还有整合能力也不行。都不知道del.icio.us和Fl…

关于v$process与v$session中process的理解
v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢?官方文档上的解释:SPID VARCHAR2(12) Operating system process identifierPROCESS VARCHAR2…

Python3中lambda表达式介绍
Python3中的lambda表达式或lambda函数是匿名函数(anonymous function),意味着该函数没有名称。def关键字用于在Python3中创建一个普通函数,类似地,lambda关键字用于在Python3中创建匿名函数。 Python3 lambda函数语法: lambda pa…
6大理由,告诉你为什么这个大会你不能错过! | 文末有福利
作者 | Carol出品 | 区块链大本营(blockchain_camp)* 文末可参与活动赢赠票!如果说有一个什么领域,能让中科院、华为、腾讯、京东、360、微众银行的大咖汇聚在一起,那一定是——区块链。悄咪咪地给大家剧透一下&#x…

魔与道的反复较量 反垃圾邮件技术
反垃圾邮件武器库不同的反垃圾邮件产品采用的技术有所不同,但总体来说,不外乎以下几种技术,其中,针对垃圾邮件的核心技术有贝叶斯智能分析、垃圾邮件评分、垃圾邮件指纹识别。转载于:https://blog.51cto.com/aonlin/17074

在Centos 7下编译openwrt+njit-client
首先要有一个centos7 step1:更新系统的源: yum install update 但是发现官方的源好像被墙了,于是自己又去换源,找163的源换。具体的操作最后的链接。 可是换完源之后发现163的源只支持到centos6、、、、、、但是就泪崩了。于是又把源换了回来…

Python3中内置函数callable介绍
Python3中的内置函数callable接受一个对象参数,如果此对象参数看起来可调用,则callable函数返回True,否则返回False。如果返回True,则调用仍有可能失败;但如果返回False,则调用对象将永远不会成功。 类是可…

户外广告新创意
近来,各大城市纷纷加大了对户外广告的监管力度,部分城市甚至停止审批户外广告牌。这让户外广告运营者和广告发布商甚为头疼。 长期以来,户外广告牌扮演着截然相反的“双重角色”,在户外广告运营者和广告发布商眼中,“寸…
百度重新定义「智能屏」,瞄准10后
加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息记者 | 阿司匹林作为中国智能音箱主力推手中的一员,百度从 2017 年已经开始布局。根据数据机构Strategy Analytics发布智能音箱市场报告,2019年第三季度,百度旗下人工…

jQuery最简单的表单提交方式
第一步:绑定事件 常用的与ajax相关的事件参考如下: 1、$(selector).click(function) 2、$(selector).change(function) 3、$(selector).keyup(function) 4、$(selector).submit(function) 提交表单前&#…

Python3中typing模块介绍
typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py。此模块为类型提示(Type Hints)提供运行时支持(This module provides runtime support for type hints)。从python 3.5版本开始将Typing作为标准库引入。 python3中增加了Function An…

显示所有文件和文件夹无论如何 无法被设置
问题:XP系统选显示所有文件和文件夹确定后没有任何反应再次打开文件夹选项里面仍是不显示隐藏的文件和文件夹 答案:在记事本粘贴下面文字,另存为所有文件, .reg 格式。成功的话图标变为绿色碎方块。在双击它。 Windows Registry E…
工作5年后才明白的道理:不起眼的技能中,藏着你的未来
编程圈儿一直都流传着一个调侃的段子:一流程序员靠数学二流靠算法三流靠逻辑四流靠SDK五流靠Google和StackOverFlow六流靠百度和自己琢磨低端的看高端的就是黑魔法!从过来人的角度看,这不仅仅是个段子,而是目前程序员的真实写照。…

Transform-style和Perspective属性
在《CSS3 Transform——transform-origin》一文中主要介绍了CSS3 Transform属性中的transform-origin属性的使用,其实在transform属性中,transform-origin属性仅是其中之一,要彻底理解transform属性,这是不够的,必须的…

Python3中__call__方法介绍
如果Python3类中有__call__方法,那么此类实例的行为类似于函数并且可以像函数一样被调用。当实例作为函数被调用时,如果定义了此方法,则x(arg1, arg2, …)是x.__call__(arg1, arg2, …)的简写。 为了将一个类实例当作函数调用,我们…

切尔西携手YouTube 英超第一家共享视频球队诞生
英格兰超级足球联赛冠军球队切尔西日前表示,已经与互联网视频服务网站YouTube签订了合作协议,未来将通过YouTube发布每日新闻和视频内容,从而也成为英超首支在线视频服务的球队. 据路透社报道,根据协议的内容,切尔西将建立一个YouTube旗下的品牌网站,其中将发布每日更新内容,当…
商汤联手华科:提出文字检测模型GNNets,新颖模块可解决几何分布难题
加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】今年的ICCV,商汤科技及联合实验室共有57篇论文入选ICCV 2019(包含11篇Oral࿰…

(链表)反转链表Reverse List
逆转链表是简单而又简单的链表问题,其问题的方法之一可以设置三个指针,一个指向当前结点,一个指向前驱结点,一个指向后继指针 代码如下: class Solution { public:ListNode* ReverseList(ListNode* pHead) { // if(pHeadNULL || pHead->nextNULL) // return pH…

很长时间没有来了
好长时间没有来自己的博客了,更新的速度实在是太慢了,自己已经找了一份新的工作,给自己一个好的环境吧,有时间可以去学习更多的网络知识了.学习万岁!加一下,博友:思念狗的骨头:[url]http://starger.blog.51cto.com/ [/url] 他的文章还是比较不错的!转载于:https://blog.51cto.c…
十年磨一剑,可重构计算架构将引领未来芯片市场
2019 年 6 月,AI 芯片创业公司清微智能首款可重构计算架构 AI 芯片实现量产的消息在业内迅速传开,可重构计算架构芯片再次引发一波讨论的热潮。经历过十多年的技术积累,这枚小小的芯片在全球芯片市场中开启了全新的篇章。时光倒流,…

PyTorch中nn.Module类中__call__方法介绍
在PyTorch源码的torch/nn/modules/module.py文件中,有一条__call__语句和一条forward语句,如下: __call__ : Callable[…, Any] _call_impl forward: Callable[…, Any] _forward_unimplemented 在PyTorch中nn.Module类是所有神经网络模块…

压缩和归档及vi的使用
1.cat(more less head tail) /etc/passwd :查看/etc/passwd文件内容2.head -13 /etc/passwd | tail -1 :只查看/etc/passwd文件中第13行3.wc -l /etc/passwd :统计/etc/passwd文件有多少行4.grep -v "^#" /etc/inittab | grep -v &…
看到抖音上Python工程师晒得工资条,我沉默了......
我是个抖音中毒者闲来无事就喜欢刷抖音最近刷到了一个Python工程师的工资条然后我默默的打开看了然后我默默的关闭了我想这个工资算下来好像也不算高我就去其他渠道搜索了一下相关的Python工作岗位的工资好吧,都是比这个工资更高的emmm.....此时我很沉默后悔为什么我…

windows上通过cmake-gui生成pytorch工程
在Windows下通过cmake-gui.exe生成不带cuda的Torch.sln工程操作步骤:PyTorch版本使用1.8.1。首先可以先通过打开cmake-gui.exe,指定pytorch源代码目录和生成vs2017工程的位置;然后点击Configure,选中”Visual Studio 15 2017 Win6…

RequisitePro SQL SERVER数据库的配置
安装好Rational RequisitePro后,新建立一个project时,要选择库的类型,可以支持MS Access、SQL SERVER和oralce首先在SQL SERVER里新建一数据库名为”RequisitePro”然后在查询分析器里执行其自带的脚本文件,位置在《Rational安装目…

yum三种方法
RHEL5中实现各种服务的准备条件:(一)、制作YUM本地源:YUM简介:YUM是Yellow dog Updater Modified的简称,yum是软件的仓库,它可以是http或ftp站点,也可以是本地软件池,但必须包含rpm的header&…