欢迎来到赛兔子家园

Python逆向参数收集

Python 支持定义具有可变参数的函数,即该函数可以接收任意多个参数,其中非关键字参数会集中存储到元组参数(*args)中,而关键字参数则集中存储到字典参数(**kwargs)中,这个过程可称为参数收集。

不仅如此,Python 还支持逆向参数收集,即直接将列表、元组、字典作为函数参数,Python 会将其进行拆分,把其中存储的元素按照次序分给函数中的各个形参。
在以逆向参数收集的方式向函数参数传值时,Pyhon 语法规定,当传入列表或元组时,其名称前要带一个 * 号,当传入字典时,其名称前要带有 2 个 * 号。

def demo(name,add):
    print("name:{0}".format(name))
    print("add:{0}".format(add))


data = ["Python教程","https://www.cnblogs.com/qingchengzi"]
# 使用逆向参数收集方式传值
demo(*data)

运行结果:

name:Python教程
add:https://www.cnblogs.com/qingchengzi

 例子2:

def demo(name,add):
    print("name:{0}".format(name))
    print("add:{0}".format(add))

data = {"name":"Python教程","add":"https://www.cnblogs.com/qingchengzi"}
# 使用逆向参数收集方式传值
demo(**data)

程序执行结果:

name:Python教程
add:https://www.cnblogs.com/qingchengzi

此外,以逆向参数收集的方式,还可以给拥有可变参数的函数传参,例如:

def demo(name,*add):
    print("name:{0}".format(name))
    print("add:{0}".format(add))

data = ["Python教程","https://www.cnblogs.com/qingchengzi","Django教程"]
# 使用逆向参数收集方式传值
demo("drf教程",*data)

程序执行结果:

name:drf教程
add:('Python教程', 'https://www.cnblogs.com/qingchengzi', 'Django教程')

上面程序中,也同样可以用逆向参数收集的方式给 name 参数传值,只需要将 "python教程" 放到 data 列表中第一个位置即可。也就是说,上面程序中,以下面代码调用demo() 函数的方式也是可行的:

def demo(name,*add):
    print("name:{0}".format(name))
    print("add:{0}".format(add))

data = ["drf教程","Python教程","https://www.cnblogs.com/qingchengzi","Django教程"]
# 使用逆向参数收集方式传值
demo(*data)

执行此程序,会发现其输出结果和上面一致。

再次强调,如果使用逆向参数收集的方式,必须注意 * 号的添加。以逆向收集列表为例,如果传参时其列表名前不带 * 号,则 Python 解释器会将整个列表作为参数传递给一个参数。例如:

def demo(name,*add):
    print("name:{0}".format(name))
    print("add:{0}".format(add))


data = ["drf教程","Python教程","https://www.cnblogs.com/qingchengzi","Django教程"]
# 使用逆向参数收集方式传值
demo(data)

程序输出结果:

name:['drf教程', 'Python教程', 'https://www.cnblogs.com/qingchengzi', 'Django教程']
add:()

 

posted on 2024-03-14 18:31  赛兔子  阅读(7)  评论(0编辑  收藏  举报

导航