Python中的各种arguments *args和**kwargs的使用与区别

参考链接:

云过小乔 Python中*args和**kwargs的区别

Python中的参数

Python中的参数,有positional argumentskeyword arguments

def function4(a=1, **kwargs):
    print(a, kwargs)

如上,apositional argumentkwargskeyword arguments

*args的使用方式

def function(*args):
    print(args, type(args), len(args))


def function2(x, y, *args):
    print(x, y, args, type(x), type(y), type(args), len(args))

# function(1, 2, 3, 4, 5)  # (1, 2, 3, 4, 5) <class 'tuple'> 5
# function2(1, 2)  # 1 2 () <class 'int'> <class 'int'> <class 'tuple'> 0
# function2(1, ) # TypeError: function2() missing 1 required positional argument: 'y'

*args 用来将参数打包成tuple给函数体调用

**kwargs的使用方式

kwargs 是 keyword arguments 的缩写

def function3(**kwargs):
    print(kwargs, type(kwargs))
function3(a=2)  # {'a': 2} <class 'dict'>
function3(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3} <class 'dict'>

**kwargs 打包关键字参数成dict给函数体调用

参数的顺序

def function6(*args, **kwargs, arg):
    print(args, kwargs, arg)

function6(6, 7, 8, 9, a=1, b=2, c=5) # SyntaxError: invalid syntax

在这里插入图片描述
参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。

def function8(*args):
    print(args)


function8(6, 7, 8, 9, a=1, b=2, c=5)

如果函数没定义keyword arguments ,却传入了keyword arguments,程序会报错

在这里插入图片描述

完整示例和测试代码

以下是完整示例和测试代码(args_kwargs.py)

def function(*args):
    print(args, type(args), len(args))


def function2(x, y, *args):
    print(x, y, args, type(x), type(y), type(args), len(args))


# *args用来将参数打包成tuple给函数体调用

# function(1, 2, 3, 4, 5)  # (1, 2, 3, 4, 5) <class 'tuple'> 5
# function2(1, 2)  # 1 2 () <class 'int'> <class 'int'> <class 'tuple'> 0
# function2(1, ) # TypeError: function2() missing 1 required positional argument: 'y'


# **kwargs打包关键字参数成dict给函数体调用
def function3(**kwargs):
    print(kwargs, type(kwargs))


# function3(a=2)  # {'a': 2} <class 'dict'>
# function3(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3} <class 'dict'>


# function3(11, a=1, b=2, c=3) 
# TypeError: function3() takes 0 positional arguments but 1 was given
# function3(a=1, b=2, c=3, a=11) # SyntaxError: keyword argument repeated

def function4(a=1, **kwargs):
    print(a, kwargs)


# function4(b=2, a=1, c=3)  # 1 {'b': 2, 'c': 3}
# function4(a=1, b=2, c=3)  # 1 {'b': 2, 'c': 3}


# 参数arg、*args、**kwargs三个参数的位置必须是一定的。
# 必须是(arg,*args,**kwargs)这个顺序,否则程序会报错

def function5(arg, *args, **kwargs):
    print(arg, args, kwargs)

# function5(6, 7, 8, 9, a=1, b=2, c=5) # 6 (7, 8, 9) {'a': 1, 'b': 2, 'c': 5}

# def function6(*args, **kwargs, arg):
#     print(args, kwargs, arg)


# function6(6, 7, 8, 9, a=1, b=2, c=5)  # SyntaxError: invalid syntax


def function7(*args, **kwargs):
    print(args, kwargs)


# function7(6, 7, 8, 9, a=1, b=2, c=5)  # (6, 7, 8, 9) {'a': 1, 'b': 2, 'c': 5}


def function8(*args):
    print(args)


function8(6, 7, 8, 9, a=1, b=2, c=5)

# positional arguments
# keyword arguments

end.感谢阅读.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值