2016年11月26日 / 150次阅读
Python
任意参数个数的函数是一种很方便的设计。
通过在函数定义的时候,指明*args,这个就表示函数接收任意个数参数。有*args,同时还可以有别的所谓的位置参数(positional argument),键值参数(keyword argument),可以混用。
下面是我自己写的一个学习函数,注意*args传递进来的是一个tuple:
>>>
>>> def test1(*args):
... print(args)
...
>>>
>>> test1(1,'b',6,'y',1.56)
(1, 'b', 6, 'y', 1.56)
>>>
>>> test1('kkkk')
('kkkk',)
>>>
>>>
>>> test1('kkkk',77)
('kkkk', 77)
>>>
*args的写法,重点在*,而不是args,你也可以协成*arggss,或者*kkk。反正记住,都是tuple。
函数设计时,一个*表示tuple,两个**表示dict,如下代码:
>>>
>>> def test2(**kwargs):
... print(kwargs)
...
>>>
>>> test2(k1=1,k2=2,k3=3)
{'k1': 1, 'k2': 2, 'k3': 3}
>>>
>>> test2(k4=4)
{'k4': 4}
>>>
2018-09-27:
Python中有一种叫做Unpacking Argument的操作,也可以用来理解其不定参数函数接口的设计思路,我们通过官方给出的两个代码段来学习吧:
>>> list(range(3, 6)) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6] # args = (3, 6) is also OK
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
#######
>>> def parrot(voltage, state='a stiff', action='voom'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.", end=' ')
... print("E's", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
*:提取List或Tuple;
**:提取Dict。
本文链接:https://www.maixj.net/ict/python-renyi-canshu-geshu-13678
《Python的任意个数参数的函数设计》有3条留言
前一篇:什么是弹道导弹?
后一篇:什么是CP?
-->只要几分钟回答问卷,就能轻松赚现金!
©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。
Python的一个特点是,同一个函数可以有不同类型的返回值。function annotation限制了函数设计的灵活性。 [ ]
进来看看 [ ]
welcome [ ]