小白入门之args, *args, **kwargs

目录

一、介绍:

二、实例:

2.1 args

2.2 *args

2.2.1 基础版

2.2.2 进阶版

2.3 **kwargs

2.4 *args 和**kkwargs连用


扫描二维码关注公众号,回复: 15235133 查看本文章

一、介绍:

首先,不是必须写成*args**kwargs,只有变量前面星号*才是必须的。也可以写成*vars**kwvars,写成*args**kwargs只是一个通俗的命名约定。

具体地,

  • args: args 是一个常规的参数列表,表示函数接收的位置参数,可以包含零个或多个参数,由逗号分隔。即一个args表示一个参数
  • *args: *args 是一个特殊的参数,用于接收任意数量的位置参数,并将它们作为一个元组传递给函数。在函数定义时,可以使用 *args 来接收多个不定长的位置参数,然后对它们进行处理。在调用函数时,可以使用 * 运算符将一个可迭代对象解包成多个单独的参数,然后将它们传递给函数。*args表示的是一个任意长度的元组,即预先并不知道,函数调用时会传递多少个参数
  • **kwargs: **kwargs 是另一个特殊的参数,用于接收任意数量的关键字参数,并将它们作为一个字典传递给函数。在函数定义时,可以使用 **kwargs 来接收多个不定长的关键字参数,然后对它们进行处理。在调用函数时,可以使用 ** 运算符将一个字典解包成多个单独的关键字参数,然后将它们传递给函数。 *kwargs传入的是一个任意长度的字典,即预先并不知道,函数调用时会传递多少个参数

二、实例:

2.1 args

args只是一个普通的参数名,可以用任何符合命名规则的符号替换,比如下面的x,y

def sum(x,y):
    z = x+y
    return z

sum(1,2)

2.2 *args

2.2.1 基础版

*args表示传入不定长度的元组。

def sum(*args):
    sum = 0
    for arg in args:
        sum = sum + arg
    return sum
t1 = sum(1)
t2 = sum(1,2)
t3 = sum(1,2,3)
print("t1,t2,t3的结果分别是:{},{},{}".format(t1, t2,t3))

 运行结果

 从运行结果可以看出: t1的时候,*args传入的是长度为1的元组,t2的时候,表示传入的是长度为2的元组,t3的时候,表示传入的是长度为3的元组。具体运行结果如图。

2.2.2 进阶版

def test_args(f_arg, *args):
    print('args的数据类型:', type(args))
    print('第一个位置参数:', f_arg)
    for arg in args:
        print('通过*args传递的参数:', arg)

test_args('linux', 'python', 'web', 'sql')

 运行结果

 分析:

代码将四个参数传入test_args函数。第一位的参数会作为f_args的参数传入,后面的三个参数,会自动变成一个长度为3的元组,作为*args参数传入。

2.3 **kwargs
 

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="John", age=30, city="New York") # 输出 name: John, age: 30, city: New York

 运行结果

2.4 *args 和**kkwargs连用

如果某个函数需要能够同时接受任意数量的位置参数和关键字参数,可以同时使用*args**kwargs
但是需要注意的是参数的位置*args要放在函数定义中最后一个位置参数后面,**kwargs要放在函数定义中所有参数的最后面,在*args后面仍然可以定义其他参数,但在*args后面定义的参数,函数调用时需使用关键字参数传参。

def any_args1(*args, name, **kwargs):
    print(args)
    print(name)
    print(kwargs)

def any_args2(*args, name='ting', **kwargs):
    print(args)
    print(name)
    print(kwargs)

any_args1('test', 1, name='ting2', two=2)
print("=======================")
any_args2('test', 1, two=2)
print("=======================")
any_args2('test', 1,  name='you', two=2)
print("=======================")
any_args2('test', 1, name='ting3', one=1, two=2)

运行结果

猜你喜欢

转载自blog.csdn.net/weixin_41862755/article/details/130413872
今日推荐