一 可变参数 Variable Argument

一 可变参数 Variable Argument

# 可变参数(Variable Argument) *args **kwargs

# 注意:
# *表示元组 **表示字典
# *和**用于形参表示接收不定长参数(pack),用于实参表示拆包(unpack)
# *args必须位于**kwargs之前,且都位于正常参数之后
# * 和 ** 之后的参数名可以任意
#   *一般使用*args,可变的positional arguments (位置参数列表)
#   **一般使用**kwargs, 可变的keyword arguments (关键字参数 键值对参数)
#   其他示例:*a *ar *arg *num都可以表示元组,**k **kw **kwa **kwar **temp都可以表示字典

# 可变参数作为参数时前面要带* 和 **,但是当在使用时就不需要*和**了,直接使用参数名就可以了。
#   一个函数中,若*args **kwargs代表形参,那么在使用时,可以直接args代表元组,kwargs代表字典
#   若args代表元组,kwargs代表字典,那么在使用时,要使用带*和**的*args **kwargs作为实参传入函数

# 若一个函数以*args, **kwargs作为形参,
#   那么其可以接收一个元组、字典作为参数,要进行元组’字典的拆包
#   也可以将参数直接写入函数参数位置,
#       在没有正常参数的情况下,所有单个参数表示*args,所有键值对表示**kwargs
#       若有正常参数的话,出去正常参数(一般放在最前面)后,所有单个参数表示*args,所有键值对表示**kwargs

示例1

def var_arg1(*args, **kwargs):
    print(args) # 代码中使用参数名就可以不用带* 和**
    print(kwargs)


# 元组和字典作
args = (1, 2, 3)
kwargs = {'name': '小明', 'age': 18}
# 元组和字典作为实参,要进行拆包
var_arg1(*args, **kwargs)  # (1, 2, 3)  {'name': '小明', 'age': 18}
# 将参数直接写入函数参数位置,拆包语法等同于这里代码
var_arg1(1, 2, 3, name='小明', age=18) # (1, 2, 3)  {'name': '小明', 'age': 18}

示例2

def var_arg2(num, *args, **kwargs):
    print(num)
    print(args)
    print(kwargs)


# 元组和字典
args = (1, 2, 3)
kwargs = {'name': '小明', 'age': 18}
# 因形参中有普通参数,会先满足普通参数然后再给可变参数
var_arg2(*args, **kwargs) # 1 (2, 3) {'name': '小明', 'age': 18}
#
var_arg2(1, 2, 3, name='小明', age=18) # 1 (2, 3) {'name': '小明', 'age': 18}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。