python-任意 / 拆解 引数列表

最后,有个较不常用的选项,是规定函式被呼叫时,可以使用任意数量的引数。这些引数会被包装进一个tuple 中。在可变数量的引数之前,可能有零个或多个普通引数:

def write_multiple_items(file, separator, *args):
    file.write(separator.join(args))

通常,这些variadic(可变的)引数会出现在参数列表的最末端,这样它们就可以把所有传递给函式的剩余输入引数都捞起来。出现在*args参数后面的任何参数必须是「仅限关键字」引数,意即它们只能作为关键字引数,而不能用作位置引数。

def concat(*args, sep="/"):
    return sep.join(args)

concat("earth", "mars", "venus")
'earth/mars/venus'
concat("earth", "mars", "venus", sep=".")
'earth.mars.venus'

拆解引数列表

当引数们已经存在一个list 或tuple 里,但为了满足一个需要个别位置引数的函式呼叫,而去拆解它们时,情况就刚好相反。例如,内建的Range()函式要求分开的startstop引数。如果这些引数不是分开的,则要在呼叫函式时,用*运算子把引数们从list 或tuple 中拆解出来:

list(range(3, 6))            # normal call with separate arguments
[3, 4, 5]
args = [3, 6]
list(range(*args))            # call with arguments unpacked from a list
[3, 4, 5]

同样地,dictionary(字典)可以用**运算子传递关键字引数:

 
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 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值