python中包是什么,python中解包是什么意思
python中的*和* *可以让一个函数支持任意数量的参数。它们在函数定义和调用上有不同的用途。
1.packing parameter *的函数:在函数定义中,将所有位置参数收集到一个新的元组中,并将这个元组赋给变量args def f(*args):
打印(参数)
f()
()
女(1)
(1,)
f(1,2,3,4)
* *的(1,2,3,4)函数:在函数定义中,收集关键字参数并传递给一个字典,将这个字典赋给变量kwargsdef (* * kwargs):
印刷品(夸脱)
f()
{}
f(a=1,b=2)
{a: 1, b: 2} 2。解包参数*的作用:在函数调用中,*可以将元组或列表解包成不同的参数def func(a,b,c,d):
打印(a、b、c、d)
args=(1,2,3,4)
func(*args)
1 2 3 4
args=[1,2,3,4]
func(*args)
1 3 4 * *的作用:在函数调用中,* *会以key/value的形式解包一个字典,使其成为一个独立的关键字参数def func(a,b,c,d):
打印(a、b、c、d)
kwargs={a: 1, b: 2, c: 3, d: 4}
func(* *克瓦查)
1 3 4 3.注1。定义函数时,*表示打包,在函数体内部,*仍然表示解包(print(*args)实际调用打印函数)def foo(*args,**kwargs):
Print(args) # Unpacked参数
Print(*args) #解包参数
v=(1,2,4)
d={a:1, b:12}
foo(v,d)
((1,2,4),{a: 1, b: 12})
(1,2,4) {a: 1, b: 12}2。打包和拆包,没有功能是不能存在的。表面上看,其实有一些函数,用的是format的函数调用。
c={ 姓名:张,年龄:2}
**c
语法错误:无效语法
姓名:{name},年龄:{age}”。格式(**c)
姓名:张,年龄:2 参见源代码中格式函数的定义。
但是,此字典解包不能通过打印功能输出。
打印(**c)
回溯(最近一次呼叫):
模块中文件“pyshell#40”的第1行
打印(**c)
类型错误:“age”是此函数的无效关键字参数,因为上面的字典求解的形式如下:
**c=name=zhang ,age=2,但是打印功能只支持*args,不支持**kwargs。
3.ddt中的application @ DDT . data(* all _ casedata)中,数据是一个函数。调用该函数时,参数* all _ casedata自动解包参数列表[{},{},{}.]到{},{},{}.在定义数据中(*)
@ddt.data(*all_caseDatas)
定义测试_我的请求(自我,案例_数据):
全球global_var
if len(global_var)!=0且case_data[request_data]不为无:
对于键,global_var.items()中的值:
if case_data[request_data]。找(键)!=-1:
案例数据[请求数据]=案例数据[请求数据]。替换(键,值)IV。练习请写出下面代码的运行结果
def f(str1,*args,**kwargs):
打印(str1,args,kwargs)
l=[1,2,3]
t=[4,5,6]
d={a:7, b:8, c:9}
f(1,2)
f(1,2,3, python )
f(python ,a=1,b=2,c=3)
打印(==============)
f(python ,l,d)
f(python ,*t)
f(python ,*l,**d)
f(python ,q=winning ,**d)
运行结果:
1 (2,) {}
1 (2,3, python) {}
python () {a: 1, b: 2, c: 3}
================
python ([1,2,3],{a: 7, b: 8, c: 9}) {}
python (4,5,6) {}
python (1,2,3) {a: 7, b: 8, c: 9}
Python () {A: 7, B: 8, Q: Winning , C: 9}需要注意的是,f(python ,*t)先将列表T解包成4,5,6,然后在def F (STR 1,* args,* * * *中解包
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。