情况1:
# 直接使用key,value接收
def demo4(**param):
for key,value in param:
print(key,':',value)
# 第一条可以正常执行,分别显示关键字的第一个和第二个字符
demo4(ab=1,cd=2,cd=5)
# 第二条会报错 too many values to unpack (expected 2)
demo4(abc=1,cde=2,cd=5)
继续测试,看使用4个参数接收会出现什么情况
情况2:
def demo5(**param):
for k1,k2,k3,k4 in param:
print(k1,':',k2,":",k3,":",k4)
# 关键字都是4个字符,不报错
demo5(aaaa=1,bbbb=2,cccc:3)
# >>> 执行结果
a : a : a : a
b : b : b : b
c : c : c : c
a : a : a : a
b : b : b : b
# 当关键字不是4位时,会报错
demo5(aaaa=1,bbbb=2,ccc:3)
对demo5做一个小的修改,就可以明白时为什么了
def demo5(**param):
for key in param:
k1,k2,k3,k4 = key
print(k1,':',k2,":",k3,":",k4)
# 关键字都是4个字符,不报错
demo5(aaaa=1,bbbb=2,cccc=3)
# demo5(aaaa=1,bbbb=2,ccc=3)
demo5(aaaa=1,bbbb=2,ccccc=3)
执行结果与未修改前完全一致,可以看到for in
如果不是使用items()
,就直接使用key,value接收, 类似于序列解包操作
下面单独在做一个测试
k1,k2,k3,k4 = "1234"
print("k1",':',k1)
print("k2",':',k2)
print("k3",':',k3)
print("k4",':',k4)
#会输出:
k1 : 1
k2 : 2
k3 : 3
k4 : 4
所以对于字符串也是可以进行序列解包操作的,接收值得变量个数必须等于字符串的长度