🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
前面章节中介绍了,Python 支持定义具有可变参数的函数,即该函数可以接收任意多个参数,其中非关键字参数会集中存储到元组参数(\*args)中,而关键字参数则集中存储到字典参数(\*\*kwargs)中,这个过程可称为参数收集。 不仅如此,Python 还支持逆向参数收集,即直接将列表、元组、字典作为函数参数,Python 会将其进行拆分,把其中存储的元素按照次序分给函数中的各个形参。 在以逆向参数收集的方式向函数参数传值时,Pyhon 语法规定,当传入列表或元组时,其名称前要带一个 \* 号,当传入字典时,其名称前要带有 2 个 \* 号。 举个例子: ``` def dis_str(name,add) : print("name:",name) print("add",add) data = ["Python教程","http://x.linyiwang.cn/python/"] #使用逆向参数收集方式传值 dis_str(*data) ``` 程序执行结果为: ``` name: Python教程 add http://x.linyiwang.cn/python/ ``` 此外,以逆向参数收集的方式,还可以给拥有可变参数的函数传参,例如: ``` def dis_str(name,*add) : print("name:",name) print("add:",add) data = ["http://x.linyiwang.cn/python/",\ "http://x.linyiwang.cn/shell/",\ "http://x.linyiwang.cn/golang/"] #使用逆向参数收集方式传值 dis_str("Python教程",*data) ``` 程序执行结果为: ``` name: Python教程 add: ('http://x.linyiwang.cn/python/', 'http://x.linyiwang.cn/shell/', 'http://x.linyiwang.cn/golang/') ``` 上面程序中,也同样可以用逆向参数收集的方式给 name 参数传值,只需要将 "python教程" 放到 data 列表中第一个位置即可。也就是说,上面程序中,以下面代码调用 dis\_str() 函数的方式也是可行的: ``` data = ["Python教程",\ "http://x.linyiwang.cn/python/",\ "http://x.linyiwang.cn/shell/",\ "http://x.linyiwang.cn/golang/"] #使用逆向参数收集方式传值 dis_str(*data) ``` 执行此程序,会发现其输出结果和上面一致。 再次强调,如果使用逆向参数收集的方式,必须注意 \* 号的添加。以逆向收集列表为例,如果传参时其列表名前不带 \* 号,则 Python 解释器会将整个列表作为参数传递给一个参数。例如: ``` def dis_str(name,*add) : print("name:",name) print("add:",add) data = ["Python教程",\ "http://x.linyiwang.cn/python/",\ "http://x.linyiwang.cn/shell/",\ "http://x.linyiwang.cn/golang/"] dis_str(data) ``` 程序执行结果为: ``` name: ['Python教程', 'http://x.linyiwang.cn/python/', 'http://x.linyiwang.cn/shell/', 'http://x.linyiwang.cn/golang/'] add: () ```