python可变参数

-- coding: utf-8 -

‘’’
位置可变参数: 一个形参可以匹配任意个参数
在形参前面使用 * 表示该形参是可变参数,可以接收多个实参
收集多个实参为一个 tuple
‘’’

def add(*nums):
    s = 0
    print(type(nums))
    for x in nums:
        s += x
    print(s)


add(3, 6, 9)
#add(nums=1) # got an unexpected keyword argument 'nums'

‘’’
关键字可变参数
形参前面使用 ** 符号,表示可以接收多个关键字参数
收集的实参名称和值组成一个字典
在混合使用的时候,可变参数要放到参数列表的最后,普通参数需要放到参数列表前面,位置可变参数需要在关键字可变参数之前
‘’’

def show_config(username, *args, **kwargs):
    print(username)
    print(args)
    for k, v in kwargs.items():
        print("{} = {}".format(k, v))


print("----------- showconfig -----------")
#show_config(host='127.0.0.1', port='1111') #takes at least 1 argument (0 given)
print("----------- 1 -----------")
show_config('root', host='127.0.0.1', port='1111')
print("----------- 2 -----------")
show_config('root', 'pass', host='127.0.0.1', port='1111')
def fn(x, y, *args, **kwargs):
    print(x)
    print(y)
    print(args)
    print(kwargs)

print("----------- fn -----------")
fn(3, 5, 7, 9, 10, a=1, b='py')
print("----------- 1 -----------")
fn(3, 5)
print("----------- 2 -----------")
fn(3, 5, 7)
print("----------- 3 -----------")
fn(3, 5, a=1, b='py')
print("----------- 4 -----------")
fn(7, 9, y=5, x=3, a=1, b='py')  #fn() got multiple values for keyword argument 'y'
print("----------- fn -----------")

‘’’
keyword-only 参数(python3): 在一个位置可变参数后,出现的普通参数.
‘’’

def fn2(*args, x):
    print(x)
    print(args)

print("----------- fn2 -----------")
fn(3, 5)
print("----------- 1 -----------")
fn(3, 5, 7)
print("----------- 2 -----------")
fn(3, 5, x=7) # args可以看作已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参


def fn3(*, x, y): # *之后,普通形参都变成了必须给出的 keyword-only 参数
    print(x, y)

print("----------- fn3 -----------")
fn3(3, 5) #takes 0 positional arguments but 2 were given
fn3(6, x=4, y=7) # takes 0 positional arguments but 1 positional argument(and 2 keyword-only arguments) given
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值