欢迎来到赛兔子家园

Python函数可变参数(*arg,**kwargs)

Python 在定义函数时也可以使用可变参数,即允许定义参数个数可变的函数。这样当调用该函数时,可以向其传入任意多个参数。

1、可变参数:形参前添加一个*

语法格式如下:

def demo(home,*str):
    print(home)
    # 输出str元组中的元素
    print("str={0}".format(str))
    for i in str:
        print(i)


# 可传入任何多个参数
demo("晒兔子","https://www.cnblogs.com/qingchengzi","https://www.python.org/")

程序执行结果为:

晒兔子
str=('https://www.cnblogs.com/qingchengzi', 'https://www.python.org/')
https://www.cnblogs.com/qingchengzi
https://www.python.org/

上面程序中,demo() 函数的最后一个参数就是 str 元组,这样在调用该函数时,除了前面位置参数接收对应位置的实参外,其它非关键字参数都会由 str 元组接收。

当然,可变参数并不一定必须为最后一个函数参数,例如修改demo() 函数为:

def demo(*str,home):
    print(home)
    # 输出str元组中的元素
    print("str={0}".format(str))
    for i in str:
        print(i)

# 可传入任何多个参数
demo("晒兔子","https://www.cnblogs.com/qingchengz

可以看到,str 可变参数作为demo() 函数的第一个参数。但需要注意的是,在调用该函数时,必须以关键字参数的形式给普通参数传值,否则 Python 解释器会把所有参数都优先传给可变参数,如果普通参数没有默认值,就会报错。

也就是说,下面代码调用上面的demo() 函数是不对的:

def demo(*str,home):
    print(home)
    # 输出str元组中的元素
    print("str={0}".format(str))
    for i in str:
        print(i)

# 可传入任何多个参数
demo("晒兔子","https://www.cnblogs.com/qingchengzi","https://www.python.org/")

报错信息:

TypeError: demo() missing 1 required keyword-only argument: 'home'
2、可变参数:形参前添加两个*

这种形式的语法格式如下:

**kwargs

**kwargs 表示创建一个名为 kwargs 的空字典,该字典可以接收任意多个以关键字参数赋值的实际参数。

如下代码:

def demo(home,*str,**course):
    print(home)
    print(str)
    print(course)# 可传入任何多个参数
demo("晒兔子",
     "https://www.cnblogs.com/qingchengzi",
     "https://www.python.org/",
     django="https://docs.djangoproject.com/en/dev/",
     drf="https://www.cnblogs.com/qingchengzi/p/18054793"

     )

程序输出结果:

晒兔子
('https://www.cnblogs.com/qingchengzi', 'https://www.python.org/')
{'django': 'https://docs.djangoproject.com/en/dev/', 'drf': 'https://www.cnblogs.com/qingchengzi/p/18054793'}

上面程序在调用demo() 函数时,第 1 个参数传递给 home 参数,第 2、3 个非关键字参数传递给 str 元组,最后 2 个关键字参数将由 course 字典接收。
注意,*args 可变参数的值默认是空元组,**kwargs 可变参数的值默认是空字典。因此,在调用具有可变参数的函数时,不一定非要给它们传值。

以调用demo

demo(home="https://docs.djangoproject.com/en/dev/")

程序执行结果为:

https://docs.djangoproject.com/en/dev/
()
{}

 

posted on 2024-03-13 10:50  赛兔子  阅读(4)  评论(0编辑  收藏  举报

导航